Produce CST nodes for the different kinds of JSON string fragments

This commit is contained in:
Martin Jambon 2023-06-23 14:54:29 -07:00
parent d36d825a07
commit bd355ef2d1
2 changed files with 32 additions and 10 deletions

View file

@ -15,10 +15,19 @@ CMD ["\b\f\n\r\t\u0ABC\u12Cd"]
(json_string)))
(cmd_instruction
(json_string_array
(json_string)))
(json_string
(escape_sequence)
(escape_sequence))))
(cmd_instruction
(json_string_array
(json_string))))
(json_string
(escape_sequence)
(escape_sequence)
(escape_sequence)
(escape_sequence)
(escape_sequence)
(escape_sequence)
(escape_sequence)))))
==========================
Double-quoted strings
@ -48,12 +57,12 @@ ENV KEY "expansions: $FOO ${BAR}"
(env_pair
(unquoted_string)
(double_quoted_string
(double_quoted_escape_sequence))))
(escape_sequence))))
(env_instruction
(env_pair
(unquoted_string)
(double_quoted_string
(double_quoted_escape_sequence))))
(escape_sequence))))
(env_instruction
(env_pair
(unquoted_string)
@ -94,13 +103,13 @@ ENV KEY 'not escape sequences: \a \n'
(env_pair
(unquoted_string)
(single_quoted_string
(single_quoted_escape_sequence)
(single_quoted_escape_sequence))))
(escape_sequence)
(escape_sequence))))
(env_instruction
(env_pair
(unquoted_string)
(single_quoted_string
(single_quoted_escape_sequence))))
(escape_sequence))))
(env_instruction
(env_pair
(unquoted_string)

View file

@ -382,7 +382,20 @@ module.exports = grammar({
// Note that JSON strings are different from the other double-quoted
// strings. They don't support $-expansions.
// Convenient reference: https://www.json.org/
json_string: ($) => /"(?:[^"\\]|\\(?:["\\/bfnrt]|u[0-9A-Fa-f]{4}))*"/,
json_string: ($) => seq(
'"',
repeat(
choice(
token.immediate(/[^"\\]+/),
alias($.json_escape_sequence, $.escape_sequence)
)
),
'"'
),
json_escape_sequence: ($) => token.immediate(
/\\(?:["\\/bfnrt]|u[0-9A-Fa-f]{4})/
),
double_quoted_string: ($) =>
seq(
@ -390,7 +403,7 @@ module.exports = grammar({
repeat(
choice(
token.immediate(/[^"\n\\\$]+/),
$.double_quoted_escape_sequence,
alias($.double_quoted_escape_sequence, $.escape_sequence),
"\\",
$._immediate_expansion
)
@ -405,7 +418,7 @@ module.exports = grammar({
repeat(
choice(
token.immediate(/[^'\n\\]+/),
$.single_quoted_escape_sequence,
alias($.single_quoted_escape_sequence, $.escape_sequence),
"\\",
)
),