Produce CST nodes for the different kinds of JSON string fragments
This commit is contained in:
parent
d36d825a07
commit
bd355ef2d1
|
@ -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)
|
||||
|
|
19
grammar.js
19
grammar.js
|
@ -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),
|
||||
"\\",
|
||||
)
|
||||
),
|
||||
|
|
Loading…
Reference in a new issue