diff options
| author | Christian Clason <c.clason@uni-graz.at> | 2023-06-12 09:54:30 -0600 |
|---|---|---|
| committer | Christian Clason <c.clason@uni-graz.at> | 2025-05-12 18:43:40 +0200 |
| commit | 692b051b09935653befdb8f7ba8afdb640adf17b (patch) | |
| tree | 167162b6b129ae04f68c5735078521a72917c742 /runtime/queries/glimmer | |
| parent | feat(c-family): inherit injections (diff) | |
| download | nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.gz nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.bz2 nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.lz nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.xz nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.tar.zst nvim-treesitter-692b051b09935653befdb8f7ba8afdb640adf17b.zip | |
feat!: drop modules, general refactor and cleanup
Diffstat (limited to 'runtime/queries/glimmer')
| -rw-r--r-- | runtime/queries/glimmer/folds.scm | 5 | ||||
| -rw-r--r-- | runtime/queries/glimmer/highlights.scm | 117 | ||||
| -rw-r--r-- | runtime/queries/glimmer/indents.scm | 34 | ||||
| -rw-r--r-- | runtime/queries/glimmer/injections.scm | 21 | ||||
| -rw-r--r-- | runtime/queries/glimmer/locals.scm | 9 |
5 files changed, 186 insertions, 0 deletions
diff --git a/runtime/queries/glimmer/folds.scm b/runtime/queries/glimmer/folds.scm new file mode 100644 index 000000000..6502455d8 --- /dev/null +++ b/runtime/queries/glimmer/folds.scm @@ -0,0 +1,5 @@ +[ + (element_node + (element_node_start)) + (block_statement) +] @fold diff --git a/runtime/queries/glimmer/highlights.scm b/runtime/queries/glimmer/highlights.scm new file mode 100644 index 000000000..9f11468d4 --- /dev/null +++ b/runtime/queries/glimmer/highlights.scm @@ -0,0 +1,117 @@ +; === Tag Names === +; Tags that start with a lower case letter are HTML tags +; We'll also use this highlighting for named blocks (which start with `:`) +((tag_name) @tag + (#lua-match? @tag "^:?[%l]")) + +; Tags that start with a capital letter are Glimmer components +((tag_name) @constructor + (#lua-match? @constructor "^%u")) + +(attribute_name) @attribute + +(string_literal) @string + +(number_literal) @number + +(boolean_literal) @boolean + +(concat_statement) @string + +; === Block Statements === +; Highlight the brackets +(block_statement_start) @tag.delimiter + +(block_statement_end) @tag.delimiter + +; Highlight `if`/`each`/`let` +(block_statement_start + path: (identifier) @keyword.conditional) + +(block_statement_end + path: (identifier) @keyword.conditional) + +((mustache_statement + (identifier) @keyword.conditional) + (#lua-match? @keyword.conditional "else")) + +; == Mustache Statements === +; Highlight the whole statement, to color brackets and separators +(mustache_statement) @tag.delimiter + +; An identifier in a mustache expression is a variable +((mustache_statement + [ + (path_expression + (identifier) @variable) + (identifier) @variable + ]) + (#not-any-of? @variable "yield" "outlet" "this" "else")) + +; As are arguments in a block statement +(block_statement_start + argument: [ + (path_expression + (identifier) @variable) + (identifier) @variable + ]) + +; As is an identifier in a block param +(block_params + (identifier) @variable) + +; As are helper arguments +((helper_invocation + argument: [ + (path_expression + (identifier) @variable) + (identifier) @variable + ]) + (#not-eq? @variable "this")) + +; `this` should be highlighted as a built-in variable +((identifier) @variable.builtin + (#eq? @variable.builtin "this")) + +; If the identifier is just "yield" or "outlet", it's a keyword +((mustache_statement + (identifier) @keyword) + (#any-of? @keyword "yield" "outlet")) + +; Helpers are functions +((helper_invocation + helper: [ + (path_expression + (identifier) @function) + (identifier) @function + ]) + (#not-any-of? @function "if" "yield")) + +((helper_invocation + helper: (identifier) @keyword.conditional) + (#eq? @keyword.conditional "if")) + +((helper_invocation + helper: (identifier) @keyword) + (#eq? @keyword "yield")) + +(hash_pair + key: (identifier) @property) + +(comment_statement) @comment @spell + +(attribute_node + "=" @operator) + +(block_params + "as" @keyword) + +(block_params + "|" @operator) + +[ + "<" + ">" + "</" + "/>" +] @tag.delimiter diff --git a/runtime/queries/glimmer/indents.scm b/runtime/queries/glimmer/indents.scm new file mode 100644 index 000000000..c1ef130c0 --- /dev/null +++ b/runtime/queries/glimmer/indents.scm @@ -0,0 +1,34 @@ +[ + (element_node + (element_node_start)) + (element_node_void) + (block_statement + (block_statement_start)) + (mustache_statement) +] @indent.begin + +(element_node + (element_node_end + ">" @indent.end)) + +(element_node_void + "/>" @indent.end) + +[ + ">" + "/>" + "</" + "{{/" + "}}" +] @indent.branch + +(mustache_statement + (helper_invocation + helper: (identifier) @_identifier + (#eq? @_identifier "else"))) @indent.branch + +(mustache_statement + ((identifier) @_identifier + (#eq? @_identifier "else"))) @indent.branch + +(comment_statement) @indent.ignore diff --git a/runtime/queries/glimmer/injections.scm b/runtime/queries/glimmer/injections.scm new file mode 100644 index 000000000..30b438682 --- /dev/null +++ b/runtime/queries/glimmer/injections.scm @@ -0,0 +1,21 @@ +; comments +((comment_statement) @injection.content + (#set! injection.language "comment")) + +; <style> tags +((element_node + (element_node_start + (tag_name) @_tag_name + (#eq? @_tag_name "style"))) @injection.content + (#offset! @injection.content 0 7 0 -8) + (#set! injection.language "css") + (#set! injection.include-children)) + +; <script> tags +((element_node + (element_node_start + (tag_name) @_tag_name + (#eq? @_tag_name "script"))) @injection.content + (#offset! @injection.content 0 8 0 -9) + (#set! injection.language "glimmer_javascript") + (#set! injection.include-children)) diff --git a/runtime/queries/glimmer/locals.scm b/runtime/queries/glimmer/locals.scm new file mode 100644 index 000000000..8fde3a297 --- /dev/null +++ b/runtime/queries/glimmer/locals.scm @@ -0,0 +1,9 @@ +[ + (element_node) + (block_statement) +] @local.scope + +(identifier) @local.reference + +(block_params + (identifier) @local.definition.var) |
