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))) (json_string)))
(cmd_instruction (cmd_instruction
(json_string_array (json_string_array
(json_string))) (json_string
(escape_sequence)
(escape_sequence))))
(cmd_instruction (cmd_instruction
(json_string_array (json_string_array
(json_string)))) (json_string
(escape_sequence)
(escape_sequence)
(escape_sequence)
(escape_sequence)
(escape_sequence)
(escape_sequence)
(escape_sequence)))))
========================== ==========================
Double-quoted strings Double-quoted strings
@ -48,12 +57,12 @@ ENV KEY "expansions: $FOO ${BAR}"
(env_pair (env_pair
(unquoted_string) (unquoted_string)
(double_quoted_string (double_quoted_string
(double_quoted_escape_sequence)))) (escape_sequence))))
(env_instruction (env_instruction
(env_pair (env_pair
(unquoted_string) (unquoted_string)
(double_quoted_string (double_quoted_string
(double_quoted_escape_sequence)))) (escape_sequence))))
(env_instruction (env_instruction
(env_pair (env_pair
(unquoted_string) (unquoted_string)
@ -94,13 +103,13 @@ ENV KEY 'not escape sequences: \a \n'
(env_pair (env_pair
(unquoted_string) (unquoted_string)
(single_quoted_string (single_quoted_string
(single_quoted_escape_sequence) (escape_sequence)
(single_quoted_escape_sequence)))) (escape_sequence))))
(env_instruction (env_instruction
(env_pair (env_pair
(unquoted_string) (unquoted_string)
(single_quoted_string (single_quoted_string
(single_quoted_escape_sequence)))) (escape_sequence))))
(env_instruction (env_instruction
(env_pair (env_pair
(unquoted_string) (unquoted_string)

View file

@ -382,7 +382,20 @@ module.exports = grammar({
// Note that JSON strings are different from the other double-quoted // Note that JSON strings are different from the other double-quoted
// strings. They don't support $-expansions. // strings. They don't support $-expansions.
// Convenient reference: https://www.json.org/ // 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: ($) => double_quoted_string: ($) =>
seq( seq(
@ -390,7 +403,7 @@ module.exports = grammar({
repeat( repeat(
choice( choice(
token.immediate(/[^"\n\\\$]+/), token.immediate(/[^"\n\\\$]+/),
$.double_quoted_escape_sequence, alias($.double_quoted_escape_sequence, $.escape_sequence),
"\\", "\\",
$._immediate_expansion $._immediate_expansion
) )
@ -405,7 +418,7 @@ module.exports = grammar({
repeat( repeat(
choice( choice(
token.immediate(/[^'\n\\]+/), token.immediate(/[^'\n\\]+/),
$.single_quoted_escape_sequence, alias($.single_quoted_escape_sequence, $.escape_sequence),
"\\", "\\",
) )
), ),