Fix key parsing in line tables (#311)
A bug was reported that indicated that inline tables did not fully support bare keys:
$ echo 'foo = { -bar => "buz"}' | ./tomljson
(1, 9): unexpected token type in inline table: Error
$ echo 'foo = { "whatever" = "buz"}' | ./tomljson
(1, 10): unexpected token type in inline table: String
echo 'foo = { _no = "buz"}' | ./tomljson
(1, 9): unexpected token type in inline table: Error
This change makes a couple of tweaks to to allow for all key variants in inline tables
Fixes: #282
This commit is contained in:
committed by
Thomas Pelletier
parent
e87c92d4f4
commit
bef0f57967
@@ -735,6 +735,58 @@ func TestLexUnknownRvalue(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func TestLexInlineTableBareKey(t *testing.T) {
|
||||
testFlow(t, `foo = { bar = "baz" }`, []token{
|
||||
{Position{1, 1}, tokenKey, "foo"},
|
||||
{Position{1, 5}, tokenEqual, "="},
|
||||
{Position{1, 7}, tokenLeftCurlyBrace, "{"},
|
||||
{Position{1, 9}, tokenKey, "bar"},
|
||||
{Position{1, 13}, tokenEqual, "="},
|
||||
{Position{1, 16}, tokenString, "baz"},
|
||||
{Position{1, 21}, tokenRightCurlyBrace, "}"},
|
||||
{Position{1, 22}, tokenEOF, ""},
|
||||
})
|
||||
}
|
||||
|
||||
func TestLexInlineTableBareKeyDash(t *testing.T) {
|
||||
testFlow(t, `foo = { -bar = "baz" }`, []token{
|
||||
{Position{1, 1}, tokenKey, "foo"},
|
||||
{Position{1, 5}, tokenEqual, "="},
|
||||
{Position{1, 7}, tokenLeftCurlyBrace, "{"},
|
||||
{Position{1, 9}, tokenKey, "-bar"},
|
||||
{Position{1, 14}, tokenEqual, "="},
|
||||
{Position{1, 17}, tokenString, "baz"},
|
||||
{Position{1, 22}, tokenRightCurlyBrace, "}"},
|
||||
{Position{1, 23}, tokenEOF, ""},
|
||||
})
|
||||
}
|
||||
|
||||
func TestLexInlineTableBareKeyUnderscore(t *testing.T) {
|
||||
testFlow(t, `foo = { _bar = "baz" }`, []token{
|
||||
{Position{1, 1}, tokenKey, "foo"},
|
||||
{Position{1, 5}, tokenEqual, "="},
|
||||
{Position{1, 7}, tokenLeftCurlyBrace, "{"},
|
||||
{Position{1, 9}, tokenKey, "_bar"},
|
||||
{Position{1, 14}, tokenEqual, "="},
|
||||
{Position{1, 17}, tokenString, "baz"},
|
||||
{Position{1, 22}, tokenRightCurlyBrace, "}"},
|
||||
{Position{1, 23}, tokenEOF, ""},
|
||||
})
|
||||
}
|
||||
|
||||
func TestLexInlineTableQuotedKey(t *testing.T) {
|
||||
testFlow(t, `foo = { "bar" = "baz" }`, []token{
|
||||
{Position{1, 1}, tokenKey, "foo"},
|
||||
{Position{1, 5}, tokenEqual, "="},
|
||||
{Position{1, 7}, tokenLeftCurlyBrace, "{"},
|
||||
{Position{1, 9}, tokenKey, "\"bar\""},
|
||||
{Position{1, 15}, tokenEqual, "="},
|
||||
{Position{1, 18}, tokenString, "baz"},
|
||||
{Position{1, 23}, tokenRightCurlyBrace, "}"},
|
||||
{Position{1, 24}, tokenEOF, ""},
|
||||
})
|
||||
}
|
||||
|
||||
func BenchmarkLexer(b *testing.B) {
|
||||
sample := `title = "Hugo: A Fast and Flexible Website Generator"
|
||||
baseurl = "http://gohugo.io/"
|
||||
|
||||
Reference in New Issue
Block a user