Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'runtime/queries/wesl/highlights.scm')
-rw-r--r--runtime/queries/wesl/highlights.scm176
1 files changed, 176 insertions, 0 deletions
diff --git a/runtime/queries/wesl/highlights.scm b/runtime/queries/wesl/highlights.scm
new file mode 100644
index 00000000..1bb5fdee
--- /dev/null
+++ b/runtime/queries/wesl/highlights.scm
@@ -0,0 +1,176 @@
+; reserved: must not be used in source code. https://www.w3.org/TR/WGSL/#reserved-words
+
+; ((identifier) @special
+; (#any-of? @special
+; "NULL" "Self" "abstract" "active" "alignas" "alignof" "as" "asm"
+; "asm_fragment" "async" "attribute" "auto" "await" "become" "binding_array"
+; "cast" "catch" "class" "co_await" "co_return" "co_yield" "coherent"
+; "column_major" "common" "compile" "compile_fragment" "concept" "const_cast"
+; "consteval" "constexpr" "constinit" "crate" "debugger" "decltype" "delete"
+; "demote" "demote_to_helper" "do" "dynamic_cast" "enum" "explicit" "export"
+; "extends" "extern" "external" "fallthrough" "filter" "final" "finally" "friend"
+; "from" "fxgroup" "get" "goto" "groupshared" "highp" "impl" "implements" "import"
+; "inline" "instanceof" "interface" "layout" "lowp" "macro" "macro_rules" "match"
+; "mediump" "meta" "mod" "module" "move" "mut" "mutable" "namespace" "new"
+; "nil" "noexcept" "noinline" "nointerpolation" "non_coherent" "noncoherent"
+; "noperspective" "null" "nullptr" "of" "operator" "package" "packoffset"
+; "partition" "pass" "patch" "pixelfragment" "precise" "precision" "premerge"
+; "priv" "protected" "pub" "public" "readonly" "ref" "regardless" "register"
+; "reinterpret_cast" "require" "resource" "restrict" "self" "set" "shared"
+; "sizeof" "smooth" "snorm" "static" "static_assert" "static_cast" "std"
+; "subroutine" "super" "target" "template" "this" "thread_local" "throw" "trait"
+; "try" "type" "typedef" "typeid" "typename" "typeof" "union" "unless" "unorm"
+; "unsafe" "unsized" "use" "using" "varying" "virtual" "volatile" "wgsl" "where"
+; "with" "writeonly" "yield"))
+
+; comments
+
+(line_comment) @comment.line
+(block_comment) @comment.block
+
+; imports (WESL extension)
+
+(import_item (identifier) @type
+ (#match? @type "^[A-Z]"))
+
+(import_item (identifier) @constant
+ (#match? @constant "^[A-Z0-9_]+$"))
+
+(import_item (identifier) @namespace)
+
+(import_path (identifier) @namespace)
+
+(ident_path (identifier) @namespace)
+
+; types
+
+((identifier) @constant
+ (#match? @constant "^[A-Z0-9_]+$"))
+
+((identifier) @type
+ (#match? @type "^[A-Z]"))
+
+(type_specifier
+ (identifier) @type)
+
+; functions
+
+(function_decl
+ (function_header
+ (identifier) @function))
+
+(call_expression
+ (identifier) @function)
+
+; templates
+
+(template_list) @punctuation
+
+(variable_decl ; this is var<storage> et.al
+ (template_list
+ (identifier) @keyword.storage.modifier))
+
+(type_specifier
+ (template_list
+ (identifier) @type))
+
+(template_list
+ (template_list
+ (identifier) @type))
+
+; attributes
+
+(attribute
+ (identifier) @attribute) @attribute
+
+(attribute
+ (identifier) @attr-name
+ (argument_list
+ (identifier) @variable.builtin)
+ (#eq? @attr-name "builtin"))
+
+; variables, names
+
+(param
+ (identifier) @variable.parameter)
+(variable_decl
+ (identifier) @variable)
+(const_assert_statement) @variable
+
+(struct_decl
+ (identifier) @type)
+
+(struct_member
+ name: (_) @variable.other.member)
+
+(named_component_expression
+ component: (_) @variable.other.member)
+
+(identifier) @variable
+
+; literals
+
+(bool_literal) @constant.builtin.boolean
+(int_literal) @constant.numeric.integer
+(float_literal) @constant.numeric.float
+
+
+; keywords
+
+[
+ "if"
+ "else"
+] @keyword.control.conditional
+[
+ "loop"
+ "for"
+ "while"
+ "break"
+ "continue"
+] @keyword.control.repeat
+[
+ "return"
+] @keyword.control.return
+[
+ "switch"
+ "case"
+ "default"
+ "discard"
+] @keyword.control
+[ ; WESL import extension
+ "import"
+ "as"
+] @keyword.control.import
+[
+ "fn"
+] @keyword.function
+[
+ "var"
+ "let"
+ "const"
+ "struct"
+] @keyword.storage.type
+[
+ "alias"
+ "virtual" ; Bevy / naga_oil extension
+ "override" ; Bevy / naga_oil extension
+] @keyword
+
+; expressions
+
+[
+ "-" "!" "~" "*" "&" ; unary
+ "^" "|" "/" "%" "+" (shift_left) (shift_right) ; binary
+ (less_than) (greater_than) (less_than_equal) (greater_than_equal) "==" "!=" ; relational
+ "+=" "-=" "*=" "/=" "%=" "|=" "^=" "++" "--" "=" ; assign
+ "->" ; return
+] @operator
+
+; punctuation
+
+[ "(" ")" "[" "]" "{" "}" ] @punctuation.bracket
+[ "," "." ":" ";" ] @punctuation.delimiter
+
+; preprocessor
+
+[ (preproc_directive) "#import" ] @keyword.directive