aboutsummaryrefslogtreecommitdiffstats
path: root/runtime/queries/glimmer
diff options
context:
space:
mode:
authorChristian Clason <c.clason@uni-graz.at>2023-06-12 09:54:30 -0600
committerChristian Clason <c.clason@uni-graz.at>2025-05-12 18:43:40 +0200
commit692b051b09935653befdb8f7ba8afdb640adf17b (patch)
tree167162b6b129ae04f68c5735078521a72917c742 /runtime/queries/glimmer
parentfeat(c-family): inherit injections (diff)
downloadnvim-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.scm5
-rw-r--r--runtime/queries/glimmer/highlights.scm117
-rw-r--r--runtime/queries/glimmer/indents.scm34
-rw-r--r--runtime/queries/glimmer/injections.scm21
-rw-r--r--runtime/queries/glimmer/locals.scm9
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)