1
0
Fork 0
mirror of https://github.com/pnx/tree-sitter-dotenv synced 2026-08-21 14:48:12 +02:00

Compare commits

...

2 commits

Author SHA1 Message Date
38ed78c2ed chore: version v1.0.1 2026-07-16 10:55:45 +02:00
0cc23a517e 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.
2026-07-16 10:47:32 +02:00
12 changed files with 244 additions and 258 deletions

View file

@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.13)
project(tree-sitter-dotenv
VERSION "1.0.1"
VERSION "1.1.0"
DESCRIPTION "Dotenv grammar for tree-sitter"
HOMEPAGE_URL "https://github.com/pnx/tree-sitter-dotenv"
LANGUAGES C)

View file

@ -1,7 +1,7 @@
[package]
name = "tree-sitter-dotenv"
description = "Dotenv grammar for tree-sitter"
version = "1.0.1"
version = "1.1.0"
license = "MIT"
readme = "README.md"
keywords = ["incremental", "parsing", "tree-sitter", "dotenv"]

2
Makefile generated
View file

@ -2,7 +2,7 @@ ifeq ($(OS),Windows_NT)
$(error Windows is not supported)
endif
VERSION := 1.0.1
VERSION := 1.1.0
LANGUAGE_NAME := tree-sitter-dotenv

View file

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

View file

@ -1,6 +1,6 @@
{
"name": "tree-sitter-dotenv",
"version": "1.0.1",
"version": "1.1.0",
"description": "Dotenv grammar for tree-sitter",
"repository": "github:pnx/tree-sitter-dotenv",
"license": "MIT",

View file

@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "tree-sitter-dotenv"
description = "Dotenv grammar for tree-sitter"
version = "1.0.1"
version = "1.1.0"
keywords = ["incremental", "parsing", "tree-sitter", "dotenv"]
classifiers = [
"Intended Audience :: Developers",

View file

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

23
src/grammar.json generated
View file

@ -38,8 +38,8 @@
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "export"
"type": "STRING",
"value": "export"
},
"named": true,
"value": "identifier"
@ -80,8 +80,8 @@
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "export"
"type": "STRING",
"value": "export"
},
{
"type": "FIELD",
@ -96,8 +96,8 @@
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "export"
"type": "STRING",
"value": "export"
},
"named": true,
"value": "identifier"
@ -138,17 +138,6 @@
"type": "PATTERN",
"value": "\\#[^\\n]*"
},
"export": {
"type": "TOKEN",
"content": {
"type": "PREC",
"value": 1,
"content": {
"type": "STRING",
"value": "export"
}
}
},
"identifier": {
"type": "PATTERN",
"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",
"named": true
"named": false
},
{
"type": "float",

372
src/parser.c generated
View file

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

View file

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

View file

@ -15,7 +15,7 @@
}
],
"metadata": {
"version": "1.0.1",
"version": "1.1.0",
"license": "MIT",
"description": "Dotenv grammar for tree-sitter",
"authors": [