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)))
|
(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)
|
||||||
|
|
19
grammar.js
19
grammar.js
|
@ -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),
|
||||||
"\\",
|
"\\",
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
|
Loading…
Reference in a new issue