diff --git a/spec/fixtures/parsers/json.c b/spec/fixtures/parsers/json.c index 8208391f..2df4d80b 100644 --- a/spec/fixtures/parsers/json.c +++ b/spec/fixtures/parsers/json.c @@ -84,11 +84,13 @@ static void ts_lex(TSParser *parser) { if (!((LOOKAHEAD_CHAR() == '\"') || (LOOKAHEAD_CHAR() == '\\'))) ADVANCE(11); + if (LOOKAHEAD_CHAR() == '\"') + ADVANCE(12); if (LOOKAHEAD_CHAR() == '\\') ADVANCE(13); if (']' <= LOOKAHEAD_CHAR() && LOOKAHEAD_CHAR() <= '\\') ADVANCE(15); - LEX_ERROR(2, EXPECT({"-!", "#-"})); + LEX_ERROR(1, EXPECT({""})); case 11: if (!((LOOKAHEAD_CHAR() == '\"') || (LOOKAHEAD_CHAR() == '\\'))) diff --git a/spec/runtime/json_spec.cpp b/spec/runtime/json_spec.cpp index 02c1dd69..67c5b15a 100644 --- a/spec/runtime/json_spec.cpp +++ b/spec/runtime/json_spec.cpp @@ -14,6 +14,12 @@ describe("json", []() { }); it("parses strings", [&]() { + TSDocumentSetText(document, "\"\""); + AssertThat(string(TSDocumentToString(document)), Equals("(value (string))")); + + TSDocumentSetText(document, "\"simple-string\""); + AssertThat(string(TSDocumentToString(document)), Equals("(value (string))")); + TSDocumentSetText(document, "\"this is a \\\"string\\\" within a string\""); AssertThat(string(TSDocumentToString(document)), Equals("(value (string))")); }); diff --git a/src/compiler/build_tables/rule_can_be_blank.cpp b/src/compiler/build_tables/rule_can_be_blank.cpp index 271b9f5f..6cf0f7cc 100644 --- a/src/compiler/build_tables/rule_can_be_blank.cpp +++ b/src/compiler/build_tables/rule_can_be_blank.cpp @@ -26,7 +26,7 @@ namespace tree_sitter { } void visit(const Repeat *rule) { - value = rule_can_be_blank(rule->content); + value = true; } };