From 159a378d3ec6a869573b765ee2e051e9d16a5709 Mon Sep 17 00:00:00 2001 From: Evan Dunbar Date: Thu, 26 Sep 2024 09:46:16 -0500 Subject: [PATCH] Add local highlighting maybe --- grammar.js | 2 +- queries/locals.scm | 5 +++++ src/grammar.json | 8 ++++++-- src/node-types.json | 15 +++++++++++++-- src/parser.c | 33 +++++++++++++++++++-------------- 5 files changed, 44 insertions(+), 19 deletions(-) create mode 100644 queries/locals.scm diff --git a/grammar.js b/grammar.js index 14d6ac0..5c810e2 100644 --- a/grammar.js +++ b/grammar.js @@ -30,7 +30,7 @@ module.exports = grammar({ 'define', 'Define', ), - $.match, + field('find', $.match), $.match, ), diff --git a/queries/locals.scm b/queries/locals.scm new file mode 100644 index 0000000..3f50f8b --- /dev/null +++ b/queries/locals.scm @@ -0,0 +1,5 @@ +(define find: (match) @local.definition.macro) +(((identifier) @local.reference) + (#set! reference.scope "global")) +(action name: ((identifier) @local.function) + (#set! function.scope "global")) diff --git a/src/grammar.json b/src/grammar.json index 5525019..6231924 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -60,8 +60,12 @@ ] }, { - "type": "SYMBOL", - "name": "match" + "type": "FIELD", + "name": "find", + "content": { + "type": "SYMBOL", + "name": "match" + } }, { "type": "SYMBOL", diff --git a/src/node-types.json b/src/node-types.json index 1bdcef4..43229a2 100644 --- a/src/node-types.json +++ b/src/node-types.json @@ -141,9 +141,20 @@ { "type": "define", "named": true, - "fields": {}, + "fields": { + "find": { + "multiple": false, + "required": true, + "types": [ + { + "type": "match", + "named": true + } + ] + } + }, "children": { - "multiple": true, + "multiple": false, "required": true, "types": [ { diff --git a/src/parser.c b/src/parser.c index 9e9bd24..26b7a6c 100644 --- a/src/parser.c +++ b/src/parser.c @@ -11,9 +11,9 @@ #define ALIAS_COUNT 0 #define TOKEN_COUNT 46 #define EXTERNAL_TOKEN_COUNT 0 -#define FIELD_COUNT 1 +#define FIELD_COUNT 2 #define MAX_ALIAS_SEQUENCE_LENGTH 6 -#define PRODUCTION_ID_COUNT 3 +#define PRODUCTION_ID_COUNT 4 enum ts_symbol_identifiers { sym_identifier = 1, @@ -503,23 +503,28 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { }; enum ts_field_identifiers { - field_name = 1, + field_find = 1, + field_name = 2, }; static const char * const ts_field_names[] = { [0] = NULL, + [field_find] = "find", [field_name] = "name", }; static const TSFieldMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { [1] = {.index = 0, .length = 1}, [2] = {.index = 1, .length = 1}, + [3] = {.index = 2, .length = 1}, }; static const TSFieldMapEntry ts_field_map_entries[] = { [0] = - {field_name, 0}, + {field_find, 1}, [1] = + {field_name, 0}, + [2] = {field_name, 1}, }; @@ -2954,28 +2959,28 @@ static const TSParseActionEntry ts_parse_actions[] = { [93] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym__expression_repeat1, 2, 0, 0), [95] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__expression_repeat1, 2, 0, 0), SHIFT_REPEAT(59), [98] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym__expression_repeat1, 2, 0, 0), - [100] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function, 5, 0, 1), - [102] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function, 5, 0, 1), + [100] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function, 5, 0, 2), + [102] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function, 5, 0, 2), [104] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_branch, 6, 0, 0), [106] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_branch, 6, 0, 0), - [108] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function, 4, 0, 1), - [110] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function, 4, 0, 1), + [108] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function, 4, 0, 2), + [110] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function, 4, 0, 2), [112] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_loop, 4, 0, 0), [114] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_loop, 4, 0, 0), [116] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_branch, 4, 0, 0), [118] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_branch, 4, 0, 0), - [120] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_action, 4, 0, 2), - [122] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_action, 4, 0, 2), - [124] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function, 3, 0, 1), - [126] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function, 3, 0, 1), + [120] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_action, 4, 0, 3), + [122] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_action, 4, 0, 3), + [124] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_function, 3, 0, 2), + [126] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_function, 3, 0, 2), [128] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_assignment, 3, 0, 0), [130] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_assignment, 3, 0, 0), [132] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_comment, 2, 0, 0), [134] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comment, 2, 0, 0), [136] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym__expression_repeat1, 2, 0, 0), SHIFT_REPEAT(58), [139] = {.entry = {.count = 1, .reusable = true}}, SHIFT(58), - [141] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_define, 3, 0, 0), - [143] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_define, 3, 0, 0), + [141] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_define, 3, 0, 1), + [143] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_define, 3, 0, 1), [145] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_include, 2, 0, 0), [147] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_include, 2, 0, 0), [149] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_comparison, 3, 0, 0),