diff options
| -rw-r--r-- | queries/glimmer/highlights.scm | 67 |
1 files changed, 59 insertions, 8 deletions
diff --git a/queries/glimmer/highlights.scm b/queries/glimmer/highlights.scm index 52c7becc..1a2730ca 100644 --- a/queries/glimmer/highlights.scm +++ b/queries/glimmer/highlights.scm @@ -1,10 +1,9 @@ -;; By @alexlafroscia (https://github.com/alexlafroscia/tree-sitter-glimmer) -;; Licensed under MIT -;; Modified for nvim-treesitter +; === 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 - (#match? @tag "^[a-z]")) + (#match? @tag "^(:)?[a-z]")) ; Tags that start with a capital letter are Glimmer components ((tag_name) @constructor (#match? @constructor "^[A-Z]")) @@ -15,16 +14,68 @@ (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) @conditional) + (#match? @conditional "^(if|each|let)$")) +((block_statement_end path: (identifier) @conditional) + (#match? @conditional "^(if|each|let)$")) +((mustache_statement (identifier) @conditional) + (#match? @conditional "else")) + ; == Mustache Statements === ; Hightlight the whole statement, to color brackets and separators (mustache_statement) @tag.delimiter -; Generic identifiers are variables -(identifier) @variable +; An identifier in a mustache expression is a variable +((mustache_statement [ + (path_expression (identifier) @variable) + (identifier) @variable + ]) + (#not-match? @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 + ]) +; `this` should be highlighted as a built-in variable +((mustache_statement [ + (path_expression (identifier) @variable.builtin) + (identifier) @variable.builtin + ]) + (#match? @variable.builtin "this")) + +; If the identifier is just "yield" or "outlet", it's a keyword +((mustache_statement (identifier) @keyword) + (#match? @keyword "yield|outlet")) + ; Helpers are functions -;TODO: does not exist -;;(helper_identifier) @function +((helper_invocation helper: [ + (path_expression (identifier) @function) + (identifier) @function + ]) + (#not-match? @function "if|yield")) +((helper_invocation helper: (identifier) @conditional) + (#match? @conditional "if")) +((helper_invocation helper: (identifier) @keyword) + (#match? @keyword "yield")) + +(hash_pair key: (identifier) @property) (comment_statement) @comment |
