Make lexComment jump back to the previous state (#122)
When a comment appears in an rvalue, the lexer needs to jump back to
lexRValue, not to lexVoid.
Fixes #120.
diff --git a/lexer.go b/lexer.go
index 4b378d4..4ba134c 100644
--- a/lexer.go
+++ b/lexer.go
@@ -131,7 +131,7 @@
case '[':
return l.lexTableKey
case '#':
- return l.lexComment
+ return l.lexComment(l.lexVoid)
case '=':
return l.lexEqual
case '\r':
@@ -182,7 +182,7 @@
case '}':
return l.lexRightCurlyBrace
case '#':
- return l.lexComment
+ return l.lexComment(l.lexRvalue)
case '"':
return l.lexString
case '\'':
@@ -309,15 +309,17 @@
return l.lexVoid
}
-func (l *tomlLexer) lexComment() tomlLexStateFn {
- for next := l.peek(); next != '\n' && next != eof; next = l.peek() {
- if next == '\r' && l.follow("\r\n") {
- break
+func (l *tomlLexer) lexComment(previousState tomlLexStateFn) tomlLexStateFn {
+ return func() tomlLexStateFn {
+ for next := l.peek(); next != '\n' && next != eof; next = l.peek() {
+ if next == '\r' && l.follow("\r\n") {
+ break
+ }
+ l.next()
}
- l.next()
+ l.ignore()
+ return previousState
}
- l.ignore()
- return l.lexVoid
}
func (l *tomlLexer) lexLeftBracket() tomlLexStateFn {
diff --git a/lexer_test.go b/lexer_test.go
index 92e4a9d..676cdb0 100644
--- a/lexer_test.go
+++ b/lexer_test.go
@@ -264,6 +264,24 @@
})
}
+func TestNestedArraysComment(t *testing.T) {
+ toml := `
+someArray = [
+# does not work
+["entry1"]
+]`
+ testFlow(t, toml, []token{
+ {Position{2, 1}, tokenKey, "someArray"},
+ {Position{2, 11}, tokenEqual, "="},
+ {Position{2, 13}, tokenLeftBracket, "["},
+ {Position{4, 1}, tokenLeftBracket, "["},
+ {Position{4, 3}, tokenString, "entry1"},
+ {Position{4, 10}, tokenRightBracket, "]"},
+ {Position{5, 1}, tokenRightBracket, "]"},
+ {Position{5, 2}, tokenEOF, ""},
+ })
+}
+
func TestKeyEqualArrayBools(t *testing.T) {
testFlow(t, "foo = [true, false, true]", []token{
{Position{1, 1}, tokenKey, "foo"},
diff --git a/parser_test.go b/parser_test.go
index 7769da3..048f514 100644
--- a/parser_test.go
+++ b/parser_test.go
@@ -283,6 +283,17 @@
})
}
+func TestNestedArrayComment(t *testing.T) {
+ tree, err := Load(`
+someArray = [
+# does not work
+["entry1"]
+]`)
+ assertTree(t, tree, err, map[string]interface{}{
+ "someArray": [][]string{{"entry1"}},
+ })
+}
+
func TestNestedEmptyArrays(t *testing.T) {
tree, err := Load("a = [[[]]]")
assertTree(t, tree, err, map[string]interface{}{