Skip to content

Commit d8d2bb7

Browse files
committed
fix: escaped quote immediately before triple quote
1 parent 34d8cc7 commit d8d2bb7

File tree

2 files changed

+19
-15
lines changed

2 files changed

+19
-15
lines changed

grammar.js

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -179,27 +179,24 @@ module.exports = grammar({
179179
// Workaround to https://github.com/tree-sitter/tree-sitter/issues/1156
180180
// We give names to the token() constructs containing a regexp
181181
// so as to obtain a node in the CST.
182-
//
183-
string_fragment: $ =>
184-
token.immediate(prec(1, /[^"\\]+/)),
185-
_multiline_string_fragment: () =>
186-
prec.right(choice(
187-
/[^"]+/,
188-
seq(/"[^"]*/, repeat(/[^"]+/))
189-
)),
182+
183+
string_fragment: _ => token.immediate(prec(1, /[^"\\]+/)),
184+
_multiline_string_fragment: _ => choice(
185+
/[^"]+/,
186+
seq(/"([^"]|\\")*/),
187+
),
190188

191189
string_interpolation: $ => seq(
192190
'\\{',
193191
$.expression,
194192
'}'
195193
),
196194

197-
_escape_sequence: $ =>
198-
choice(
199-
prec(2, token.immediate(seq('\\', /[^abfnrtvxu'\"\\\?]/))),
200-
prec(1, $.escape_sequence)
201-
),
202-
escape_sequence: () => token.immediate(seq(
195+
_escape_sequence: $ => choice(
196+
prec(2, token.immediate(seq('\\', /[^abfnrtvxu'\"\\\?]/))),
197+
prec(1, $.escape_sequence)
198+
),
199+
escape_sequence: _ => token.immediate(seq(
203200
'\\',
204201
choice(
205202
/[^xu0-7]/,
@@ -209,7 +206,7 @@ module.exports = grammar({
209206
/u{[0-9a-fA-F]+}/
210207
))),
211208

212-
null_literal: $ => 'null',
209+
null_literal: _ => 'null',
213210

214211
// Expressions
215212

test/corpus/literals.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,9 @@ at new line
194194
\\
195195
""";
196196

197+
"""
198+
string="has a quote with an escaped end quote\"""";
199+
197200
---
198201

199202
(program
@@ -231,6 +234,10 @@ at new line
231234
(multiline_string_fragment)))
232235
(expression_statement
233236
(string_literal
237+
(multiline_string_fragment)))
238+
(expression_statement
239+
(string_literal
240+
(multiline_string_fragment)
234241
(multiline_string_fragment))))
235242

236243
===============

0 commit comments

Comments
 (0)