diff options
author | Philipp Mildenberger | 2023-03-10 16:32:45 +0000 |
---|---|---|
committer | GitHub | 2023-03-10 16:32:45 +0000 |
commit | 98415f288ffa043520b0c85bc4464dc44b85f948 (patch) | |
tree | 6675fdc3aa9f3b482a5f2e8bc872dc3c8a3686fb /runtime/queries/yuck | |
parent | d63e570e0a4013f5ad703a9b1ce2d19a06630a82 (diff) |
Improved yuck highlighting (and parser), and introduced a tag.builtin scope (#6242)
Diffstat (limited to 'runtime/queries/yuck')
-rw-r--r-- | runtime/queries/yuck/highlights.scm | 135 | ||||
-rw-r--r-- | runtime/queries/yuck/injections.scm | 2 |
2 files changed, 89 insertions, 48 deletions
diff --git a/runtime/queries/yuck/highlights.scm b/runtime/queries/yuck/highlights.scm index 483348a8..9f116f15 100644 --- a/runtime/queries/yuck/highlights.scm +++ b/runtime/queries/yuck/highlights.scm @@ -1,66 +1,107 @@ +; Errors + (ERROR) @error -(line_comment) @comment +; Comments -; keywords and symbols +(comment) @comment -(keyword) @keyword -(symbol) @tag +; Operators -; literals +[ + "+" + "-" + "*" + "/" + "%" + "||" + "&&" + "==" + "!=" + "=~" + ">" + "<" + ">=" + "<=" + "!" + "?." + "?:" +] @operator -(bool_literal) @constant.builtin.boolean -(num_literal) @constant.numeric +(ternary_expression + ["?" ":"] @operator) -; strings -(string_interpolation - (string_interpolation_start) @punctuation.special - (string_interpolation_end) @punctuation.special) +; Punctuation + +[ ":" "." "," ] @punctuation.delimiter + +[ "{" "}" "[" "]" "(" ")" ] @punctuation.bracket + +; Literals + +(number (float)) @constant.numeric.float + +(number (integer)) @constant.numeric.integer + +(boolean) @constant.builtin.boolean + +; Strings (escape_sequence) @constant.character.escape -(string - [ - (unescaped_single_quote_string_fragment) - (unescaped_double_quote_string_fragment) - (unescaped_backtick_string_fragment) - "\"" - "'" - "`" - ]) @string +(string_interpolation + "${" @punctuation.special + "}" @punctuation.special) -; operators and general punctuation +[ (string_fragment) "\"" "'" "`" ] @string -(unary_expression - operator: _ @operator) +; Attributes & Fields -(binary_expression - operator: _ @operator) +(keyword) @attribute -(ternary_expression - operator: _ @operator) +; Functions -[ - ":" - "." - "," -] @punctuation.delimiter +(function_call + name: (ident) @function) -[ - "(" - ")" - "[" - "]" - "{" - "}" -] @punctuation.bracket -[ - ":" - "." - "," -] @punctuation.delimiter +; Variables -; Rest (general identifiers that are not yet catched) +(ident) @variable + +(array + (symbol) @variable) + +; Builtin widgets + +(list . + ((symbol) @tag.builtin + (#match? @tag.builtin "^(box|button|calendar|centerbox|checkbox|circular-progress|color-button|color-chooser|combo-box-text|eventbox|expander|graph|image|input|label|literal|overlay|progress|revealer|scale|scroll|transform)$"))) + +; Keywords + +; I think there's a bug in tree-sitter the anchor doesn't seem to be working, see +; https://github.com/tree-sitter/tree-sitter/pull/2107 +(list . + ((symbol) @keyword + (#match? @keyword "^(defwindow|defwidget|defvar|defpoll|deflisten|geometry|children|struts)$"))) + +(list . + ((symbol) @keyword.control.import + (#eq? @keyword.control.import "include"))) + +; Loop + +(loop_widget . "for" @keyword.control.repeat . (symbol) @variable . "in" @keyword.operator . (symbol) @variable) + +(loop_widget . "for" @keyword.control.repeat . (symbol) @variable . "in" @keyword.operator) + +; Tags + +; TODO apply to every symbol in list? I think it should probably only be applied to the first child of the list +(list + (symbol) @tag) + +; Other stuff that has not been catched by the previous queries yet -(index) @variable (ident) @variable +(index) @variable diff --git a/runtime/queries/yuck/injections.scm b/runtime/queries/yuck/injections.scm index d3fdb0ca..321c90ad 100644 --- a/runtime/queries/yuck/injections.scm +++ b/runtime/queries/yuck/injections.scm @@ -1,2 +1,2 @@ -((line_comment) @injection.content +((comment) @injection.content (#set! injection.language "comment")) |