Merge pull request #11 from pelletier/fix_comments_multilines_array
Comments in a multiline array cause parse error
diff --git a/lexer.go b/lexer.go
index b70ff74..2593466 100644
--- a/lexer.go
+++ b/lexer.go
@@ -175,6 +175,10 @@
l.ignore()
}
+ if l.depth > 0 {
+ return lexRvalue
+ }
+
if l.next() == eof {
break
}
diff --git a/lexer_test.go b/lexer_test.go
index 9a98689..e5846bd 100644
--- a/lexer_test.go
+++ b/lexer_test.go
@@ -207,6 +207,22 @@
})
}
+func TestMultilineArrayComments(t *testing.T) {
+ testFlow(t, "a = [1, # wow\n2, # such items\n3, # so array\n]", []token{
+ token{tokenKey, "a"},
+ token{tokenEqual, "="},
+ token{tokenLeftBracket, "["},
+ token{tokenInteger, "1"},
+ token{tokenComma, ","},
+ token{tokenInteger, "2"},
+ token{tokenComma, ","},
+ token{tokenInteger, "3"},
+ token{tokenComma, ","},
+ token{tokenRightBracket, "]"},
+ token{tokenEOF, ""},
+ })
+}
+
func TestKeyEqualArrayBools(t *testing.T) {
testFlow(t, "foo = [true, false, true]", []token{
token{tokenKey, "foo"},
diff --git a/parser_test.go b/parser_test.go
index 7f7888e..629e0a6 100644
--- a/parser_test.go
+++ b/parser_test.go
@@ -170,6 +170,20 @@
})
}
+func TestArrayWithExtraComma(t *testing.T) {
+ tree, err := Load("a = [1,\n2,\n3,\n]")
+ assertTree(t, tree, err, map[string]interface{}{
+ "a": []int64{int64(1), int64(2), int64(3)},
+ })
+}
+
+func TestArrayWithExtraCommaComment(t *testing.T) {
+ tree, err := Load("a = [1, # wow\n2, # such items\n3, # so array\n]")
+ assertTree(t, tree, err, map[string]interface{}{
+ "a": []int64{int64(1), int64(2), int64(3)},
+ })
+}
+
func TestMissingFile(t *testing.T) {
_, err := LoadFile("foo.toml")
if err.Error() != "open foo.toml: no such file or directory" {