diff --git a/.gitignore b/.gitignore index 7d5b7a9..39e4380 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ /build /node_modules + +/bindings/rust +/Cargo.toml diff --git a/.gitmodules b/.gitmodules index 49a6187..922f976 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,4 +1,4 @@ [submodule "tree-sitter"] path = tree-sitter url = https://github.com/ikatyang/tree-sitter - branch = 0.16.7-custom + branch = v0.19.3-custom diff --git a/binding.gyp b/binding.gyp index 2d6f536..328438d 100644 --- a/binding.gyp +++ b/binding.gyp @@ -9,7 +9,7 @@ "sources": [ "src/parser.c", "src/scanner.c", - "src/binding.cc" + "bindings/node/binding.cc" ], "cflags_c": [ "-std=c99", diff --git a/src/binding.cc b/bindings/node/binding.cc similarity index 100% rename from src/binding.cc rename to bindings/node/binding.cc diff --git a/bindings/node/index.js b/bindings/node/index.js new file mode 100644 index 0000000..d330755 --- /dev/null +++ b/bindings/node/index.js @@ -0,0 +1,19 @@ +try { + module.exports = require("../../build/Release/tree_sitter_toml_binding"); +} catch (error1) { + if (error1.code !== 'MODULE_NOT_FOUND') { + throw error1; + } + try { + module.exports = require("../../build/Debug/tree_sitter_toml_binding"); + } catch (error2) { + if (error2.code !== 'MODULE_NOT_FOUND') { + throw error2; + } + throw error1 + } +} + +try { + module.exports.nodeTypeInfo = require("../../src/node-types.json"); +} catch (_) {} diff --git a/index.js b/index.js deleted file mode 100644 index 4362506..0000000 --- a/index.js +++ /dev/null @@ -1,13 +0,0 @@ -try { - module.exports = require("./build/Release/tree_sitter_toml_binding"); -} catch (error) { - try { - module.exports = require("./build/Debug/tree_sitter_toml_binding"); - } catch (_) { - throw error - } -} - -try { - module.exports.nodeTypeInfo = require("./src/node-types.json"); -} catch (_) {} diff --git a/package.json b/package.json index 9af81aa..af20e0f 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "parser", "lexer" ], - "main": "index.js", + "main": "bindings/node", "repository": "https://github.com/ikatyang/tree-sitter-toml", "homepage": "https://github.com/ikatyang/tree-sitter-toml#readme", "author": { @@ -37,9 +37,8 @@ "files": [ "/src/", "/queries/", - "/binding.gyp", - "/grammar.js", - "/index.js" + "/bindings/node/", + "/grammar.js" ], "tree-sitter": [ { diff --git a/src/grammar.json b/src/grammar.json index f99acf2..24421fc 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -809,6 +809,7 @@ } ], "conflicts": [], + "precedences": [], "externals": [ { "type": "SYMBOL", diff --git a/src/node-types.json b/src/node-types.json index e1cfdb6..d2ad0d5 100644 --- a/src/node-types.json +++ b/src/node-types.json @@ -320,6 +320,10 @@ "type": "boolean", "named": true }, + { + "type": "comment", + "named": true + }, { "type": "escape_sequence", "named": true diff --git a/src/parser.c b/src/parser.c index 40f0833..8050700 100644 --- a/src/parser.c +++ b/src/parser.c @@ -5,7 +5,7 @@ #pragma GCC diagnostic ignored "-Wmissing-field-initializers" #endif -#define LANGUAGE_VERSION 11 +#define LANGUAGE_VERSION 13 #define STATE_COUNT 152 #define LARGE_STATE_COUNT 2 #define SYMBOL_COUNT 66 @@ -14,6 +14,7 @@ #define EXTERNAL_TOKEN_COUNT 5 #define FIELD_COUNT 0 #define MAX_ALIAS_SEQUENCE_LENGTH 8 +#define PRODUCTION_ID_COUNT 2 enum { aux_sym_document_token1 = 1, @@ -488,13 +489,20 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { }, }; -static TSSymbol ts_alias_sequences[2][MAX_ALIAS_SEQUENCE_LENGTH] = { +static TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE_LENGTH] = { [0] = {0}, [1] = { [1] = sym_pair, }, }; +static uint16_t ts_non_terminal_alias_map[] = { + sym__inline_pair, 2, + sym__inline_pair, + sym_pair, + 0, +}; + static bool ts_lex(TSLexer *lexer, TSStateId state) { START_LEXER(); eof = lexer->eof(lexer); @@ -542,7 +550,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == '\t' || lookahead == ' ') ADVANCE(124); if (lookahead != 0 && - (lookahead < 0 || 31 < lookahead) && + lookahead > 31 && lookahead != 127) ADVANCE(125); END_STATE(); case 3: @@ -553,7 +561,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == '\t' || lookahead == ' ') ADVANCE(134); if (lookahead != 0 && - (lookahead < 0 || 31 < lookahead) && + lookahead > 31 && lookahead != 127) ADVANCE(135); END_STATE(); case 4: @@ -908,7 +916,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { case 79: ACCEPT_TOKEN(sym_comment); if (lookahead != 0 && - (lookahead < 0 || 8 < lookahead) && + lookahead > 8 && (lookahead < '\n' || 31 < lookahead) && lookahead != 127) ADVANCE(79); END_STATE(); @@ -1269,7 +1277,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == '\t' || lookahead == ' ') ADVANCE(124); if (lookahead != 0 && - (lookahead < 0 || 31 < lookahead) && + lookahead > 31 && lookahead != '"' && lookahead != '\\' && lookahead != 127) ADVANCE(125); @@ -1277,7 +1285,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { case 125: ACCEPT_TOKEN(aux_sym__basic_string_token1); if (lookahead != 0 && - (lookahead < 0 || 8 < lookahead) && + lookahead > 8 && (lookahead < '\n' || 31 < lookahead) && lookahead != '"' && lookahead != '\\' && @@ -1315,14 +1323,14 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == '\t' || lookahead == ' ') ADVANCE(134); if (lookahead != 0 && - (lookahead < 0 || 31 < lookahead) && + lookahead > 31 && lookahead != '\'' && lookahead != 127) ADVANCE(135); END_STATE(); case 135: ACCEPT_TOKEN(aux_sym__literal_string_token1); if (lookahead != 0 && - (lookahead < 0 || 8 < lookahead) && + lookahead > 8 && (lookahead < '\n' || 31 < lookahead) && lookahead != '\'' && lookahead != 127) ADVANCE(135); @@ -4534,20 +4542,23 @@ extern const TSLanguage *tree_sitter_toml(void) { .symbol_count = SYMBOL_COUNT, .alias_count = ALIAS_COUNT, .token_count = TOKEN_COUNT, + .external_token_count = EXTERNAL_TOKEN_COUNT, + .state_count = STATE_COUNT, .large_state_count = LARGE_STATE_COUNT, - .symbol_metadata = ts_symbol_metadata, - .parse_table = (const unsigned short *)ts_parse_table, + .production_id_count = PRODUCTION_ID_COUNT, + .field_count = FIELD_COUNT, + .max_alias_sequence_length = MAX_ALIAS_SEQUENCE_LENGTH, + .parse_table = (const uint16_t *)ts_parse_table, .small_parse_table = (const uint16_t *)ts_small_parse_table, .small_parse_table_map = (const uint32_t *)ts_small_parse_table_map, .parse_actions = ts_parse_actions, - .lex_modes = ts_lex_modes, .symbol_names = ts_symbol_names, + .symbol_metadata = ts_symbol_metadata, .public_symbol_map = ts_symbol_map, + .alias_map = ts_non_terminal_alias_map, .alias_sequences = (const TSSymbol *)ts_alias_sequences, - .field_count = FIELD_COUNT, - .max_alias_sequence_length = MAX_ALIAS_SEQUENCE_LENGTH, + .lex_modes = ts_lex_modes, .lex_fn = ts_lex, - .external_token_count = EXTERNAL_TOKEN_COUNT, .external_scanner = { (const bool *)ts_external_scanner_states, ts_external_scanner_symbol_map, diff --git a/src/tree_sitter/parser.h b/src/tree_sitter/parser.h index 11bf4fc..a3a87bd 100644 --- a/src/tree_sitter/parser.h +++ b/src/tree_sitter/parser.h @@ -13,6 +13,8 @@ extern "C" { #define ts_builtin_sym_end 0 #define TREE_SITTER_SERIALIZATION_BUFFER_SIZE 1024 +typedef uint16_t TSStateId; + #ifndef TREE_SITTER_API_H_ typedef uint16_t TSSymbol; typedef uint16_t TSFieldId; @@ -30,11 +32,10 @@ typedef struct { uint16_t length; } TSFieldMapSlice; -typedef uint16_t TSStateId; - typedef struct { - bool visible : 1; - bool named : 1; + bool visible; + bool named; + bool supertype; } TSSymbolMetadata; typedef struct TSLexer TSLexer; @@ -56,21 +57,21 @@ typedef enum { TSParseActionTypeRecover, } TSParseActionType; -typedef struct { - union { - struct { - TSStateId state; - bool extra : 1; - bool repetition : 1; - } shift; - struct { - TSSymbol symbol; - int16_t dynamic_precedence; - uint8_t child_count; - uint8_t production_id; - } reduce; - } params; - TSParseActionType type : 4; +typedef union { + struct { + uint8_t type; + TSStateId state; + bool extra; + bool repetition; + } shift; + struct { + uint8_t type; + uint8_t child_count; + TSSymbol symbol; + int16_t dynamic_precedence; + uint16_t production_id; + } reduce; + uint8_t type; } TSParseAction; typedef struct { @@ -82,7 +83,7 @@ typedef union { TSParseAction action; struct { uint8_t count; - bool reusable : 1; + bool reusable; } entry; } TSParseActionEntry; @@ -92,13 +93,24 @@ struct TSLanguage { uint32_t alias_count; uint32_t token_count; uint32_t external_token_count; - const char **symbol_names; - const TSSymbolMetadata *symbol_metadata; - const uint16_t *parse_table; - const TSParseActionEntry *parse_actions; - const TSLexMode *lex_modes; - const TSSymbol *alias_sequences; + uint32_t state_count; + uint32_t large_state_count; + uint32_t production_id_count; + uint32_t field_count; uint16_t max_alias_sequence_length; + const uint16_t *parse_table; + const uint16_t *small_parse_table; + const uint32_t *small_parse_table_map; + const TSParseActionEntry *parse_actions; + const char **symbol_names; + const char **field_names; + const TSFieldMapSlice *field_map_slices; + const TSFieldMapEntry *field_map_entries; + const TSSymbolMetadata *symbol_metadata; + const TSSymbol *public_symbol_map; + const uint16_t *alias_map; + const TSSymbol *alias_sequences; + const TSLexMode *lex_modes; bool (*lex_fn)(TSLexer *, TSStateId); bool (*keyword_lex_fn)(TSLexer *, TSStateId); TSSymbol keyword_capture_token; @@ -111,14 +123,6 @@ struct TSLanguage { unsigned (*serialize)(void *, char *); void (*deserialize)(void *, const char *, unsigned); } external_scanner; - uint32_t field_count; - const TSFieldMapSlice *field_map_slices; - const TSFieldMapEntry *field_map_entries; - const char **field_names; - uint32_t large_state_count; - const uint16_t *small_parse_table; - const uint32_t *small_parse_table_map; - const TSSymbol *public_symbol_map; }; /* @@ -167,66 +171,50 @@ struct TSLanguage { #define ACTIONS(id) id -#define SHIFT(state_value) \ - { \ - { \ - .params = { \ - .shift = { \ - .state = state_value \ - } \ - }, \ - .type = TSParseActionTypeShift \ - } \ - } +#define SHIFT(state_value) \ + {{ \ + .shift = { \ + .type = TSParseActionTypeShift, \ + .state = state_value \ + } \ + }} #define SHIFT_REPEAT(state_value) \ - { \ - { \ - .params = { \ - .shift = { \ - .state = state_value, \ - .repetition = true \ - } \ - }, \ - .type = TSParseActionTypeShift \ + {{ \ + .shift = { \ + .type = TSParseActionTypeShift, \ + .state = state_value, \ + .repetition = true \ } \ - } - -#define RECOVER() \ - { \ - { .type = TSParseActionTypeRecover } \ - } + }} #define SHIFT_EXTRA() \ - { \ - { \ - .params = { \ - .shift = { \ - .extra = true \ - } \ - }, \ - .type = TSParseActionTypeShift \ + {{ \ + .shift = { \ + .type = TSParseActionTypeShift, \ + .extra = true \ } \ - } + }} #define REDUCE(symbol_val, child_count_val, ...) \ - { \ - { \ - .params = { \ - .reduce = { \ - .symbol = symbol_val, \ - .child_count = child_count_val, \ - __VA_ARGS__ \ - }, \ - }, \ - .type = TSParseActionTypeReduce \ - } \ - } + {{ \ + .reduce = { \ + .type = TSParseActionTypeReduce, \ + .symbol = symbol_val, \ + .child_count = child_count_val, \ + __VA_ARGS__ \ + }, \ + }} -#define ACCEPT_INPUT() \ - { \ - { .type = TSParseActionTypeAccept } \ - } +#define RECOVER() \ + {{ \ + .type = TSParseActionTypeRecover \ + }} + +#define ACCEPT_INPUT() \ + {{ \ + .type = TSParseActionTypeAccept \ + }} #ifdef __cplusplus } diff --git a/tree-sitter b/tree-sitter index 1ccb0ac..fc5a692 160000 --- a/tree-sitter +++ b/tree-sitter @@ -1 +1 @@ -Subproject commit 1ccb0ac0e840c58f23012dd495bd0180884077e1 +Subproject commit fc5a692b7d5f144cc531f5823b1c5a3b2f06cf01