1
0
Fork 0
mirror of https://github.com/pnx/tree-sitter-dotenv synced 2026-08-26 16:08:13 +02:00

feat: make export keyword anonymous.

"export" was a named node despite always having fixed spelling, with
no variation to expose to queries. Anonymous string literals are
already fully queryable ("export" @keyword), so the named production
added a redundant node in the tree for no benefit.

Keeps the alias("export", $.identifier) in the key field, since that
usage is a genuine reclassification (export as an identifier, not the
keyword) and still needs to be named.

Updated corpus tests to use :cst format where "export" and "="
presence needs to be asserted explicitly.
This commit is contained in:
Henrik Hautakoski 2026-07-16 10:47:32 +02:00
parent 65e3328e01
commit 0cc23a517e
6 changed files with 236 additions and 250 deletions

View file

@ -24,17 +24,17 @@ module.exports = grammar({
seq( seq(
field("key", choice( field("key", choice(
$.identifier, $.identifier,
alias($.export, $.identifier), alias("export", $.identifier),
)), )),
"=", "=",
optional(field("value", $._value)), optional(field("value", $._value)),
$._end_of_assignment, $._end_of_assignment,
), ),
prec(1, seq( prec(1, seq(
$.export, "export",
field("key", choice( field("key", choice(
$.identifier, $.identifier,
alias($.export, $.identifier), alias("export", $.identifier),
)), )),
"=", "=",
optional(field("value", $._value)), optional(field("value", $._value)),
@ -43,7 +43,6 @@ module.exports = grammar({
), ),
comment: _ => /\#[^\n]*/, comment: _ => /\#[^\n]*/,
export: _ => token(prec(1, 'export')),
identifier: _ => /[A-Za-z_][A-Za-z0-9_]*/, identifier: _ => /[A-Za-z_][A-Za-z0-9_]*/,
variable: $ => seq('$', choice( variable: $ => seq('$', choice(

View file

@ -1,8 +1,8 @@
"=" @operator "=" @operator
(comment) @comment "export" @keyword
(export) @keyword (comment) @comment
(boolean) @constant (boolean) @constant

23
src/grammar.json generated
View file

@ -38,8 +38,8 @@
{ {
"type": "ALIAS", "type": "ALIAS",
"content": { "content": {
"type": "SYMBOL", "type": "STRING",
"name": "export" "value": "export"
}, },
"named": true, "named": true,
"value": "identifier" "value": "identifier"
@ -80,8 +80,8 @@
"type": "SEQ", "type": "SEQ",
"members": [ "members": [
{ {
"type": "SYMBOL", "type": "STRING",
"name": "export" "value": "export"
}, },
{ {
"type": "FIELD", "type": "FIELD",
@ -96,8 +96,8 @@
{ {
"type": "ALIAS", "type": "ALIAS",
"content": { "content": {
"type": "SYMBOL", "type": "STRING",
"name": "export" "value": "export"
}, },
"named": true, "named": true,
"value": "identifier" "value": "identifier"
@ -138,17 +138,6 @@
"type": "PATTERN", "type": "PATTERN",
"value": "\\#[^\\n]*" "value": "\\#[^\\n]*"
}, },
"export": {
"type": "TOKEN",
"content": {
"type": "PREC",
"value": 1,
"content": {
"type": "STRING",
"value": "export"
}
}
},
"identifier": { "identifier": {
"type": "PATTERN", "type": "PATTERN",
"value": "[A-Za-z_][A-Za-z0-9_]*" "value": "[A-Za-z_][A-Za-z0-9_]*"

12
src/node-types.json generated
View file

@ -39,16 +39,6 @@
} }
] ]
} }
},
"children": {
"multiple": false,
"required": false,
"types": [
{
"type": "export",
"named": true
}
]
} }
}, },
{ {
@ -173,7 +163,7 @@
}, },
{ {
"type": "export", "type": "export",
"named": true "named": false
}, },
{ {
"type": "float", "type": "float",

368
src/parser.c generated
View file

@ -21,9 +21,9 @@
enum ts_symbol_identifiers { enum ts_symbol_identifiers {
sym_identifier = 1, sym_identifier = 1,
anon_sym_EQ = 2, anon_sym_export = 2,
sym_comment = 3, anon_sym_EQ = 3,
sym_export = 4, sym_comment = 4,
anon_sym_DOLLAR = 5, anon_sym_DOLLAR = 5,
anon_sym_LBRACE = 6, anon_sym_LBRACE = 6,
anon_sym_RBRACE = 7, anon_sym_RBRACE = 7,
@ -53,9 +53,9 @@ enum ts_symbol_identifiers {
static const char * const ts_symbol_names[] = { static const char * const ts_symbol_names[] = {
[ts_builtin_sym_end] = "end", [ts_builtin_sym_end] = "end",
[sym_identifier] = "identifier", [sym_identifier] = "identifier",
[anon_sym_export] = "export",
[anon_sym_EQ] = "=", [anon_sym_EQ] = "=",
[sym_comment] = "comment", [sym_comment] = "comment",
[sym_export] = "export",
[anon_sym_DOLLAR] = "$", [anon_sym_DOLLAR] = "$",
[anon_sym_LBRACE] = "{", [anon_sym_LBRACE] = "{",
[anon_sym_RBRACE] = "}", [anon_sym_RBRACE] = "}",
@ -85,9 +85,9 @@ static const char * const ts_symbol_names[] = {
static const TSSymbol ts_symbol_map[] = { static const TSSymbol ts_symbol_map[] = {
[ts_builtin_sym_end] = ts_builtin_sym_end, [ts_builtin_sym_end] = ts_builtin_sym_end,
[sym_identifier] = sym_identifier, [sym_identifier] = sym_identifier,
[anon_sym_export] = anon_sym_export,
[anon_sym_EQ] = anon_sym_EQ, [anon_sym_EQ] = anon_sym_EQ,
[sym_comment] = sym_comment, [sym_comment] = sym_comment,
[sym_export] = sym_export,
[anon_sym_DOLLAR] = anon_sym_DOLLAR, [anon_sym_DOLLAR] = anon_sym_DOLLAR,
[anon_sym_LBRACE] = anon_sym_LBRACE, [anon_sym_LBRACE] = anon_sym_LBRACE,
[anon_sym_RBRACE] = anon_sym_RBRACE, [anon_sym_RBRACE] = anon_sym_RBRACE,
@ -123,6 +123,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = {
.visible = true, .visible = true,
.named = true, .named = true,
}, },
[anon_sym_export] = {
.visible = true,
.named = false,
},
[anon_sym_EQ] = { [anon_sym_EQ] = {
.visible = true, .visible = true,
.named = false, .named = false,
@ -131,10 +135,6 @@ static const TSSymbolMetadata ts_symbol_metadata[] = {
.visible = true, .visible = true,
.named = true, .named = true,
}, },
[sym_export] = {
.visible = true,
.named = true,
},
[anon_sym_DOLLAR] = { [anon_sym_DOLLAR] = {
.visible = true, .visible = true,
.named = false, .named = false,
@ -247,10 +247,10 @@ static const char * const ts_field_names[] = {
static const TSMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { static const TSMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = {
[1] = {.index = 0, .length = 1}, [1] = {.index = 0, .length = 1},
[2] = {.index = 0, .length = 1}, [2] = {.index = 0, .length = 1},
[3] = {.index = 1, .length = 2}, [3] = {.index = 1, .length = 1},
[4] = {.index = 3, .length = 1}, [4] = {.index = 2, .length = 2},
[5] = {.index = 3, .length = 1}, [5] = {.index = 1, .length = 1},
[6] = {.index = 1, .length = 2}, [6] = {.index = 2, .length = 2},
[7] = {.index = 4, .length = 2}, [7] = {.index = 4, .length = 2},
[8] = {.index = 4, .length = 2}, [8] = {.index = 4, .length = 2},
}; };
@ -259,10 +259,10 @@ static const TSFieldMapEntry ts_field_map_entries[] = {
[0] = [0] =
{field_key, 0}, {field_key, 0},
[1] = [1] =
{field_key, 1},
[2] =
{field_key, 0}, {field_key, 0},
{field_value, 2}, {field_value, 2},
[3] =
{field_key, 1},
[4] = [4] =
{field_key, 1}, {field_key, 1},
{field_value, 3}, {field_value, 3},
@ -274,10 +274,10 @@ static const TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE
[0] = sym_identifier, [0] = sym_identifier,
}, },
[3] = { [3] = {
[0] = sym_identifier, [1] = sym_identifier,
}, },
[4] = { [4] = {
[1] = sym_identifier, [0] = sym_identifier,
}, },
[7] = { [7] = {
[1] = sym_identifier, [1] = sym_identifier,
@ -312,9 +312,9 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = {
[20] = 20, [20] = 20,
[21] = 21, [21] = 21,
[22] = 22, [22] = 22,
[23] = 23, [23] = 22,
[24] = 22, [24] = 24,
[25] = 20, [25] = 25,
[26] = 26, [26] = 26,
[27] = 27, [27] = 27,
[28] = 28, [28] = 28,
@ -332,10 +332,10 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = {
[40] = 40, [40] = 40,
[41] = 21, [41] = 21,
[42] = 42, [42] = 42,
[43] = 43, [43] = 20,
[44] = 44, [44] = 44,
[45] = 35, [45] = 36,
[46] = 42, [46] = 44,
}; };
static bool ts_lex(TSLexer *lexer, TSStateId state) { static bool ts_lex(TSLexer *lexer, TSStateId state) {
@ -754,7 +754,7 @@ static bool ts_lex_keywords(TSLexer *lexer, TSStateId state) {
if (lookahead == 't') ADVANCE(6); if (lookahead == 't') ADVANCE(6);
END_STATE(); END_STATE();
case 6: case 6:
ACCEPT_TOKEN(sym_export); ACCEPT_TOKEN(anon_sym_export);
END_STATE(); END_STATE();
default: default:
return false; return false;
@ -785,28 +785,28 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = {
[20] = {.lex_state = 2}, [20] = {.lex_state = 2},
[21] = {.lex_state = 2}, [21] = {.lex_state = 2},
[22] = {.lex_state = 8}, [22] = {.lex_state = 8},
[23] = {.lex_state = 3}, [23] = {.lex_state = 8},
[24] = {.lex_state = 8}, [24] = {.lex_state = 3},
[25] = {.lex_state = 0, .external_lex_state = 1}, [25] = {.lex_state = 0, .external_lex_state = 1},
[26] = {.lex_state = 0}, [26] = {.lex_state = 0},
[27] = {.lex_state = 0, .external_lex_state = 1}, [27] = {.lex_state = 0, .external_lex_state = 1},
[28] = {.lex_state = 0, .external_lex_state = 1}, [28] = {.lex_state = 0},
[29] = {.lex_state = 0, .external_lex_state = 1}, [29] = {.lex_state = 0, .external_lex_state = 1},
[30] = {.lex_state = 0, .external_lex_state = 1}, [30] = {.lex_state = 0, .external_lex_state = 1},
[31] = {.lex_state = 0, .external_lex_state = 1}, [31] = {.lex_state = 0, .external_lex_state = 1},
[32] = {.lex_state = 0}, [32] = {.lex_state = 0, .external_lex_state = 1},
[33] = {.lex_state = 0, .external_lex_state = 1}, [33] = {.lex_state = 0, .external_lex_state = 1},
[34] = {.lex_state = 0}, [34] = {.lex_state = 0},
[35] = {.lex_state = 0}, [35] = {.lex_state = 0},
[36] = {.lex_state = 0, .external_lex_state = 1}, [36] = {.lex_state = 0},
[37] = {.lex_state = 0, .external_lex_state = 1}, [37] = {.lex_state = 0, .external_lex_state = 1},
[38] = {.lex_state = 0, .external_lex_state = 1}, [38] = {.lex_state = 0},
[39] = {.lex_state = 0, .external_lex_state = 1}, [39] = {.lex_state = 0, .external_lex_state = 1},
[40] = {.lex_state = 0}, [40] = {.lex_state = 0, .external_lex_state = 1},
[41] = {.lex_state = 0, .external_lex_state = 1}, [41] = {.lex_state = 0, .external_lex_state = 1},
[42] = {.lex_state = 8}, [42] = {.lex_state = 0, .external_lex_state = 1},
[43] = {.lex_state = 0, .external_lex_state = 1}, [43] = {.lex_state = 0, .external_lex_state = 1},
[44] = {.lex_state = 0}, [44] = {.lex_state = 8},
[45] = {.lex_state = 0}, [45] = {.lex_state = 0},
[46] = {.lex_state = 8}, [46] = {.lex_state = 8},
}; };
@ -815,9 +815,9 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = {
[STATE(0)] = { [STATE(0)] = {
[ts_builtin_sym_end] = ACTIONS(1), [ts_builtin_sym_end] = ACTIONS(1),
[sym_identifier] = ACTIONS(1), [sym_identifier] = ACTIONS(1),
[anon_sym_export] = ACTIONS(1),
[anon_sym_EQ] = ACTIONS(1), [anon_sym_EQ] = ACTIONS(1),
[sym_comment] = ACTIONS(1), [sym_comment] = ACTIONS(1),
[sym_export] = ACTIONS(1),
[anon_sym_DOLLAR] = ACTIONS(1), [anon_sym_DOLLAR] = ACTIONS(1),
[anon_sym_LBRACE] = ACTIONS(1), [anon_sym_LBRACE] = ACTIONS(1),
[anon_sym_RBRACE] = ACTIONS(1), [anon_sym_RBRACE] = ACTIONS(1),
@ -831,21 +831,21 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = {
}, },
[STATE(1)] = { [STATE(1)] = {
[sym_document] = STATE(26), [sym_document] = STATE(26),
[sym_assignment] = STATE(6), [sym_assignment] = STATE(7),
[aux_sym_document_repeat1] = STATE(6), [aux_sym_document_repeat1] = STATE(7),
[ts_builtin_sym_end] = ACTIONS(3), [ts_builtin_sym_end] = ACTIONS(3),
[sym_identifier] = ACTIONS(5), [sym_identifier] = ACTIONS(5),
[sym_comment] = ACTIONS(7), [anon_sym_export] = ACTIONS(7),
[sym_export] = ACTIONS(9), [sym_comment] = ACTIONS(9),
}, },
[STATE(2)] = { [STATE(2)] = {
[sym_variable] = STATE(33), [sym_variable] = STATE(33),
[sym__value] = STATE(33), [sym__value] = STATE(33),
[sym_string] = STATE(33), [sym_string] = STATE(33),
[sym__literal_string] = STATE(30), [sym__literal_string] = STATE(32),
[sym__string] = STATE(30), [sym__string] = STATE(32),
[sym_number] = STATE(33), [sym_number] = STATE(33),
[sym_integer] = STATE(28), [sym_integer] = STATE(30),
[anon_sym_DOLLAR] = ACTIONS(11), [anon_sym_DOLLAR] = ACTIONS(11),
[anon_sym_SQUOTE] = ACTIONS(13), [anon_sym_SQUOTE] = ACTIONS(13),
[anon_sym_DQUOTE] = ACTIONS(15), [anon_sym_DQUOTE] = ACTIONS(15),
@ -860,10 +860,10 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = {
[sym_variable] = STATE(39), [sym_variable] = STATE(39),
[sym__value] = STATE(39), [sym__value] = STATE(39),
[sym_string] = STATE(39), [sym_string] = STATE(39),
[sym__literal_string] = STATE(30), [sym__literal_string] = STATE(32),
[sym__string] = STATE(30), [sym__string] = STATE(32),
[sym_number] = STATE(39), [sym_number] = STATE(39),
[sym_integer] = STATE(28), [sym_integer] = STATE(30),
[anon_sym_DOLLAR] = ACTIONS(11), [anon_sym_DOLLAR] = ACTIONS(11),
[anon_sym_SQUOTE] = ACTIONS(13), [anon_sym_SQUOTE] = ACTIONS(13),
[anon_sym_DQUOTE] = ACTIONS(15), [anon_sym_DQUOTE] = ACTIONS(15),
@ -875,13 +875,13 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = {
[sym__end_of_assignment] = ACTIONS(27), [sym__end_of_assignment] = ACTIONS(27),
}, },
[STATE(4)] = { [STATE(4)] = {
[sym_variable] = STATE(29), [sym_variable] = STATE(42),
[sym__value] = STATE(29), [sym__value] = STATE(42),
[sym_string] = STATE(29), [sym_string] = STATE(42),
[sym__literal_string] = STATE(30), [sym__literal_string] = STATE(32),
[sym__string] = STATE(30), [sym__string] = STATE(32),
[sym_number] = STATE(29), [sym_number] = STATE(42),
[sym_integer] = STATE(28), [sym_integer] = STATE(30),
[anon_sym_DOLLAR] = ACTIONS(11), [anon_sym_DOLLAR] = ACTIONS(11),
[anon_sym_SQUOTE] = ACTIONS(13), [anon_sym_SQUOTE] = ACTIONS(13),
[anon_sym_DQUOTE] = ACTIONS(15), [anon_sym_DQUOTE] = ACTIONS(15),
@ -896,10 +896,10 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = {
[sym_variable] = STATE(31), [sym_variable] = STATE(31),
[sym__value] = STATE(31), [sym__value] = STATE(31),
[sym_string] = STATE(31), [sym_string] = STATE(31),
[sym__literal_string] = STATE(30), [sym__literal_string] = STATE(32),
[sym__string] = STATE(30), [sym__string] = STATE(32),
[sym_number] = STATE(31), [sym_number] = STATE(31),
[sym_integer] = STATE(28), [sym_integer] = STATE(30),
[anon_sym_DOLLAR] = ACTIONS(11), [anon_sym_DOLLAR] = ACTIONS(11),
[anon_sym_SQUOTE] = ACTIONS(13), [anon_sym_SQUOTE] = ACTIONS(13),
[anon_sym_DQUOTE] = ACTIONS(15), [anon_sym_DQUOTE] = ACTIONS(15),
@ -914,27 +914,27 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = {
static const uint16_t ts_small_parse_table[] = { static const uint16_t ts_small_parse_table[] = {
[0] = 5, [0] = 5,
ACTIONS(5), 1,
sym_identifier,
ACTIONS(9), 1,
sym_export,
ACTIONS(37), 1, ACTIONS(37), 1,
ts_builtin_sym_end, ts_builtin_sym_end,
ACTIONS(39), 1, ACTIONS(39), 1,
sym_identifier,
ACTIONS(42), 1,
anon_sym_export,
ACTIONS(45), 1,
sym_comment, sym_comment,
STATE(7), 2, STATE(6), 2,
sym_assignment, sym_assignment,
aux_sym_document_repeat1, aux_sym_document_repeat1,
[17] = 5, [17] = 5,
ACTIONS(41), 1, ACTIONS(5), 1,
ts_builtin_sym_end,
ACTIONS(43), 1,
sym_identifier, sym_identifier,
ACTIONS(46), 1, ACTIONS(7), 1,
anon_sym_export,
ACTIONS(48), 1,
ts_builtin_sym_end,
ACTIONS(50), 1,
sym_comment, sym_comment,
ACTIONS(49), 1, STATE(6), 2,
sym_export,
STATE(7), 2,
sym_assignment, sym_assignment,
aux_sym_document_repeat1, aux_sym_document_repeat1,
[34] = 4, [34] = 4,
@ -968,68 +968,68 @@ static const uint16_t ts_small_parse_table[] = {
sym_variable, sym_variable,
aux_sym__string_repeat1, aux_sym__string_repeat1,
[76] = 2, [76] = 2,
ACTIONS(72), 1, ACTIONS(70), 2,
sym_identifier,
ACTIONS(70), 3,
ts_builtin_sym_end, ts_builtin_sym_end,
sym_comment, sym_comment,
sym_export, ACTIONS(72), 2,
anon_sym_export,
sym_identifier,
[85] = 2, [85] = 2,
ACTIONS(76), 1, ACTIONS(74), 2,
sym_identifier,
ACTIONS(74), 3,
ts_builtin_sym_end, ts_builtin_sym_end,
sym_comment, sym_comment,
sym_export, ACTIONS(76), 2,
anon_sym_export,
sym_identifier,
[94] = 2, [94] = 2,
ACTIONS(80), 1, ACTIONS(78), 2,
sym_identifier,
ACTIONS(78), 3,
ts_builtin_sym_end, ts_builtin_sym_end,
sym_comment, sym_comment,
sym_export, ACTIONS(80), 2,
anon_sym_export,
sym_identifier,
[103] = 2, [103] = 2,
ACTIONS(84), 1, ACTIONS(82), 2,
sym_identifier,
ACTIONS(82), 3,
ts_builtin_sym_end, ts_builtin_sym_end,
sym_comment, sym_comment,
sym_export, ACTIONS(84), 2,
anon_sym_export,
sym_identifier,
[112] = 2, [112] = 2,
ACTIONS(88), 1, ACTIONS(86), 2,
sym_identifier,
ACTIONS(86), 3,
ts_builtin_sym_end, ts_builtin_sym_end,
sym_comment, sym_comment,
sym_export, ACTIONS(88), 2,
anon_sym_export,
sym_identifier,
[121] = 2, [121] = 2,
ACTIONS(92), 1, ACTIONS(90), 2,
sym_identifier,
ACTIONS(90), 3,
ts_builtin_sym_end, ts_builtin_sym_end,
sym_comment, sym_comment,
sym_export, ACTIONS(92), 2,
anon_sym_export,
sym_identifier,
[130] = 2, [130] = 2,
ACTIONS(96), 1, ACTIONS(94), 2,
sym_identifier,
ACTIONS(94), 3,
ts_builtin_sym_end, ts_builtin_sym_end,
sym_comment, sym_comment,
sym_export, ACTIONS(96), 2,
anon_sym_export,
sym_identifier,
[139] = 2, [139] = 2,
ACTIONS(100), 1, ACTIONS(98), 2,
sym_identifier,
ACTIONS(98), 3,
ts_builtin_sym_end, ts_builtin_sym_end,
sym_comment, sym_comment,
sym_export, ACTIONS(100), 2,
anon_sym_export,
sym_identifier,
[148] = 3, [148] = 3,
ACTIONS(102), 1, ACTIONS(102), 1,
sym_identifier, sym_identifier,
ACTIONS(104), 1, ACTIONS(104), 1,
anon_sym_EQ, anon_sym_export,
ACTIONS(106), 1, ACTIONS(106), 1,
sym_export, anon_sym_EQ,
[158] = 2, [158] = 2,
ACTIONS(110), 1, ACTIONS(110), 1,
aux_sym__string_token1, aux_sym__string_token1,
@ -1049,74 +1049,74 @@ static const uint16_t ts_small_parse_table[] = {
anon_sym_LBRACE, anon_sym_LBRACE,
[181] = 2, [181] = 2,
ACTIONS(120), 1, ACTIONS(120), 1,
anon_sym_SQUOTE, sym_identifier,
ACTIONS(122), 1, ACTIONS(122), 1,
aux_sym__literal_string_token1, anon_sym_LBRACE,
[188] = 2, [188] = 2,
ACTIONS(124), 1, ACTIONS(124), 1,
sym_identifier, anon_sym_SQUOTE,
ACTIONS(126), 1, ACTIONS(126), 1,
anon_sym_LBRACE, aux_sym__literal_string_token1,
[195] = 1, [195] = 1,
ACTIONS(110), 1, ACTIONS(128), 1,
sym__end_of_assignment, sym__end_of_assignment,
[199] = 1, [199] = 1,
ACTIONS(128), 1, ACTIONS(130), 1,
ts_builtin_sym_end, ts_builtin_sym_end,
[203] = 1, [203] = 1,
ACTIONS(130), 1,
sym__end_of_assignment,
[207] = 1,
ACTIONS(132), 1, ACTIONS(132), 1,
sym__end_of_assignment, sym__end_of_assignment,
[211] = 1, [207] = 1,
ACTIONS(134), 1, ACTIONS(134), 1,
sym__end_of_assignment, anon_sym_SQUOTE,
[215] = 1, [211] = 1,
ACTIONS(136), 1, ACTIONS(136), 1,
sym__end_of_assignment, sym__end_of_assignment,
[219] = 1, [215] = 1,
ACTIONS(138), 1, ACTIONS(138), 1,
sym__end_of_assignment, sym__end_of_assignment,
[223] = 1, [219] = 1,
ACTIONS(140), 1, ACTIONS(140), 1,
anon_sym_EQ, sym__end_of_assignment,
[227] = 1, [223] = 1,
ACTIONS(142), 1, ACTIONS(142), 1,
sym__end_of_assignment, sym__end_of_assignment,
[231] = 1, [227] = 1,
ACTIONS(144), 1, ACTIONS(144), 1,
sym__end_of_assignment,
[231] = 1,
ACTIONS(146), 1,
anon_sym_EQ, anon_sym_EQ,
[235] = 1, [235] = 1,
ACTIONS(146), 1,
anon_sym_RBRACE,
[239] = 1,
ACTIONS(148), 1, ACTIONS(148), 1,
sym__end_of_assignment, anon_sym_EQ,
[243] = 1, [239] = 1,
ACTIONS(150), 1, ACTIONS(150), 1,
sym__end_of_assignment, anon_sym_RBRACE,
[247] = 1, [243] = 1,
ACTIONS(152), 1, ACTIONS(152), 1,
sym__end_of_assignment, sym__end_of_assignment,
[251] = 1, [247] = 1,
ACTIONS(154), 1, ACTIONS(154), 1,
anon_sym_EQ,
[251] = 1,
ACTIONS(156), 1,
sym__end_of_assignment, sym__end_of_assignment,
[255] = 1, [255] = 1,
ACTIONS(156), 1, ACTIONS(158), 1,
anon_sym_EQ, sym__end_of_assignment,
[259] = 1, [259] = 1,
ACTIONS(114), 1, ACTIONS(114), 1,
sym__end_of_assignment, sym__end_of_assignment,
[263] = 1, [263] = 1,
ACTIONS(158), 1,
sym_identifier,
[267] = 1,
ACTIONS(160), 1, ACTIONS(160), 1,
sym__end_of_assignment, sym__end_of_assignment,
[267] = 1,
ACTIONS(110), 1,
sym__end_of_assignment,
[271] = 1, [271] = 1,
ACTIONS(162), 1, ACTIONS(162), 1,
anon_sym_SQUOTE, sym_identifier,
[275] = 1, [275] = 1,
ACTIONS(164), 1, ACTIONS(164), 1,
anon_sym_RBRACE, anon_sym_RBRACE,
@ -1173,34 +1173,34 @@ static const TSParseActionEntry ts_parse_actions[] = {
[0] = {.entry = {.count = 0, .reusable = false}}, [0] = {.entry = {.count = 0, .reusable = false}},
[1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(), [1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(),
[3] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_document, 0, 0, 0), [3] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_document, 0, 0, 0),
[5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40), [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(38),
[7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), [7] = {.entry = {.count = 1, .reusable = false}}, SHIFT(19),
[9] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), [9] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7),
[11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22), [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23),
[13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23), [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24),
[15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), [15] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8),
[17] = {.entry = {.count = 1, .reusable = false}}, SHIFT(38), [17] = {.entry = {.count = 1, .reusable = false}}, SHIFT(40),
[19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(28), [19] = {.entry = {.count = 1, .reusable = false}}, SHIFT(30),
[21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(33), [21] = {.entry = {.count = 1, .reusable = false}}, SHIFT(33),
[23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), [23] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14),
[25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(39), [25] = {.entry = {.count = 1, .reusable = false}}, SHIFT(39),
[27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12),
[29] = {.entry = {.count = 1, .reusable = false}}, SHIFT(29), [29] = {.entry = {.count = 1, .reusable = false}}, SHIFT(42),
[31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17),
[33] = {.entry = {.count = 1, .reusable = false}}, SHIFT(31), [33] = {.entry = {.count = 1, .reusable = false}}, SHIFT(31),
[35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), [35] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11),
[37] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_document, 1, 0, 0), [37] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_document_repeat1, 2, 0, 0),
[39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), [39] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_document_repeat1, 2, 0, 0), SHIFT_REPEAT(38),
[41] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_document_repeat1, 2, 0, 0), [42] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_document_repeat1, 2, 0, 0), SHIFT_REPEAT(19),
[43] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_document_repeat1, 2, 0, 0), SHIFT_REPEAT(40), [45] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_document_repeat1, 2, 0, 0), SHIFT_REPEAT(6),
[46] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_document_repeat1, 2, 0, 0), SHIFT_REPEAT(7), [48] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_document, 1, 0, 0),
[49] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_document_repeat1, 2, 0, 0), SHIFT_REPEAT(19), [50] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6),
[52] = {.entry = {.count = 1, .reusable = false}}, SHIFT(24), [52] = {.entry = {.count = 1, .reusable = false}}, SHIFT(22),
[54] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27), [54] = {.entry = {.count = 1, .reusable = false}}, SHIFT(29),
[56] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9), [56] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9),
[58] = {.entry = {.count = 1, .reusable = false}}, SHIFT(37), [58] = {.entry = {.count = 1, .reusable = false}}, SHIFT(25),
[60] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), [60] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10),
[62] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__string_repeat1, 2, 0, 0), SHIFT_REPEAT(24), [62] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym__string_repeat1, 2, 0, 0), SHIFT_REPEAT(22),
[65] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__string_repeat1, 2, 0, 0), [65] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__string_repeat1, 2, 0, 0),
[67] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__string_repeat1, 2, 0, 0), SHIFT_REPEAT(10), [67] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__string_repeat1, 2, 0, 0), SHIFT_REPEAT(10),
[70] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 3, 0, 1), [70] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 3, 0, 1),
@ -1209,46 +1209,46 @@ static const TSParseActionEntry ts_parse_actions[] = {
[76] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment, 3, 0, 2), [76] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment, 3, 0, 2),
[78] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 4, 0, 4), [78] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 4, 0, 4),
[80] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment, 4, 0, 4), [80] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment, 4, 0, 4),
[82] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 4, 0, 3), [82] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 4, 0, 5),
[84] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment, 4, 0, 3), [84] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment, 4, 0, 5),
[86] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 4, 0, 5), [86] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 4, 0, 6),
[88] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment, 4, 0, 5), [88] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment, 4, 0, 6),
[90] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 4, 0, 6), [90] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 5, 0, 7),
[92] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment, 4, 0, 6), [92] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment, 5, 0, 7),
[94] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 5, 0, 7), [94] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 4, 0, 3),
[96] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment, 5, 0, 7), [96] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment, 4, 0, 3),
[98] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 5, 0, 8), [98] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 5, 0, 8),
[100] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment, 5, 0, 8), [100] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment, 5, 0, 8),
[102] = {.entry = {.count = 1, .reusable = false}}, SHIFT(34), [102] = {.entry = {.count = 1, .reusable = false}}, SHIFT(34),
[104] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), [104] = {.entry = {.count = 1, .reusable = false}}, SHIFT(35),
[106] = {.entry = {.count = 1, .reusable = true}}, SHIFT(32), [106] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5),
[108] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_variable, 2, 0, 0), [108] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_variable, 2, 0, 0),
[110] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable, 2, 0, 0), [110] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable, 2, 0, 0),
[112] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_variable, 4, 0, 0), [112] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_variable, 4, 0, 0),
[114] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable, 4, 0, 0), [114] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_variable, 4, 0, 0),
[116] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25), [116] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20),
[118] = {.entry = {.count = 1, .reusable = true}}, SHIFT(42), [118] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46),
[120] = {.entry = {.count = 1, .reusable = false}}, SHIFT(43), [120] = {.entry = {.count = 1, .reusable = true}}, SHIFT(43),
[122] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44), [122] = {.entry = {.count = 1, .reusable = true}}, SHIFT(44),
[124] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20), [124] = {.entry = {.count = 1, .reusable = false}}, SHIFT(27),
[126] = {.entry = {.count = 1, .reusable = true}}, SHIFT(46), [126] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28),
[128] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), [128] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__string, 3, 0, 0),
[130] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__string, 2, 0, 0), [130] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(),
[132] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0), [132] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__literal_string, 2, 0, 0),
[134] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), [134] = {.entry = {.count = 1, .reusable = true}}, SHIFT(37),
[136] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 1, 0, 0), [136] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__string, 2, 0, 0),
[138] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17), [138] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_number, 1, 0, 0),
[140] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), [140] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13),
[142] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18), [142] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_string, 1, 0, 0),
[144] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), [144] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18),
[146] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41), [146] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2),
[148] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__literal_string, 3, 0, 0), [148] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4),
[150] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__string, 3, 0, 0), [150] = {.entry = {.count = 1, .reusable = true}}, SHIFT(41),
[152] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0), [152] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__literal_string, 3, 0, 0),
[154] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16), [154] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3),
[156] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), [156] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15),
[158] = {.entry = {.count = 1, .reusable = true}}, SHIFT(35), [158] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_integer, 1, 0, 0),
[160] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__literal_string, 2, 0, 0), [160] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16),
[162] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36), [162] = {.entry = {.count = 1, .reusable = true}}, SHIFT(36),
[164] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), [164] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21),
[166] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45), [166] = {.entry = {.count = 1, .reusable = true}}, SHIFT(45),

View file

@ -1,5 +1,6 @@
================================================================================ ================================================================================
Export keyword Export keyword
:cst
================================================================================ ================================================================================
export VAR=one export VAR=one
@ -9,27 +10,31 @@ export export=var
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
(document 1:0 - 5:0 document
(assignment 1:0 - 1:14 assignment
(export) 1:0 - 1:6 "export"
(identifier) 1:7 - 1:10 key: identifier `VAR`
(value)) 1:10 - 1:11 "="
(assignment 1:11 - 1:14 value: value `one`
(export) 2:0 - 2:18 assignment
(identifier) 2:0 - 2:6 "export"
(value)) 2:8 - 2:11 key: identifier `VAR`
(assignment 2:13 - 2:14 "="
(export) 2:15 - 2:18 value: value `one`
(identifier) 3:0 - 3:14 assignment
(value)) 3:0 - 3:6 "export"
(assignment 3:7 - 3:10 key: identifier `TAB`
(export) 3:10 - 3:11 "="
(identifier) 3:11 - 3:14 value: value `two`
(value)) 4:0 - 4:17 assignment
) 4:0 - 4:6 "export"
4:7 - 4:13 key: identifier `export`
4:13 - 4:14 "="
4:14 - 4:17 value: value `var`
================================================================================ ================================================================================
Export-like identifiers Export-like identifiers
:cst
================================================================================ ================================================================================
export=one export=one
@ -40,17 +45,20 @@ exportVAR = two
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
(document 1:0 - 6:0 document
(assignment 1:0 - 1:10 assignment
key: (identifier) 1:0 - 1:6 key: identifier `export`
value: (value)) 1:6 - 1:7 "="
(assignment 1:7 - 1:10 value: value `one`
key: (identifier) 2:0 - 2:12 assignment
value: (value)) 2:0 - 2:6 key: identifier `export`
(assignment 2:7 - 2:8 "="
key: (identifier) 2:9 - 2:12 value: value `one`
value: (value)) 3:0 - 3:13 assignment
(assignment 3:0 - 3:9 key: identifier `exportVAR`
key: (identifier) 3:9 - 3:10 "="
value: (value)) 3:10 - 3:13 value: value `two`
) 4:0 - 4:15 assignment
4:0 - 4:9 key: identifier `exportVAR`
4:10 - 4:11 "="
4:12 - 4:15 value: value `two`