From b4e795d70430d28ecd37f8e1564cbd568d17e0b9 Mon Sep 17 00:00:00 2001 From: Chickenkeeper Date: Fri, 14 Oct 2022 02:31:32 +0100 Subject: [PATCH] Fix C++ syntax highlighting, and improve C & WGSL highlighting (#4079) --- languages.toml | 4 +- runtime/queries/c/highlights.scm | 160 ++++++++++++++++--------- runtime/queries/cpp/highlights.scm | 108 ++++++++++++----- runtime/queries/wgsl/highlights.scm | 177 ++++++++++++++-------------- 4 files changed, 274 insertions(+), 175 deletions(-) diff --git a/languages.toml b/languages.toml index 892f3117f..24110865d 100644 --- a/languages.toml +++ b/languages.toml @@ -184,7 +184,7 @@ args = { console = "internalConsole", attachCommands = [ "platform select remote [[grammar]] name = "c" -source = { git = "https://github.com/tree-sitter/tree-sitter-c", rev = "f05e279aedde06a25801c3f2b2cc8ac17fac52ae" } +source = { git = "https://github.com/tree-sitter/tree-sitter-c", rev = "7175a6dd5fc1cee660dce6fe23f6043d75af424a" } [[language]] name = "cpp" @@ -221,7 +221,7 @@ args = { console = "internalConsole", attachCommands = [ "platform select remote [[grammar]] name = "cpp" -source = { git = "https://github.com/tree-sitter/tree-sitter-cpp", rev = "e8dcc9d2b404c542fd236ea5f7208f90be8a6e89" } +source = { git = "https://github.com/tree-sitter/tree-sitter-cpp", rev = "d5e90fba898f320db48d81ddedd78d52c67c1fed" } [[language]] name = "c-sharp" diff --git a/runtime/queries/c/highlights.scm b/runtime/queries/c/highlights.scm index 647df05dd..c0f5763ac 100644 --- a/runtime/queries/c/highlights.scm +++ b/runtime/queries/c/highlights.scm @@ -1,65 +1,104 @@ -(storage_class_specifier) @keyword.storage - -"goto" @keyword -"register" @keyword -"break" @keyword -"case" @keyword -"continue" @keyword -"default" @keyword -"do" @keyword -"else" @keyword -"enum" @keyword -"extern" @keyword -"for" @keyword -"if" @keyword -"inline" @keyword -"return" @keyword "sizeof" @keyword -"struct" @keyword -"switch" @keyword -"typedef" @keyword -"union" @keyword -"volatile" @keyword -"while" @keyword -"const" @keyword [ - "#define" - "#elif" - "#else" - "#endif" - "#if" - "#ifdef" - "#ifndef" - "#include" - (preproc_directive) + "enum" + "struct" + "typedef" + "union" +] @keyword.storage.type + +[ + "const" + "extern" + "inline" + "register" + "volatile" + (storage_class_specifier) +] @keyword.storage.modifier + +[ + "goto" + "break" + "continue" +] @keyword.control + +[ + "do" + "for" + "while" +] @keyword.control.repeat + +[ + "if" + "else" + "switch" + "case" + "default" +] @keyword.control.conditional + +"return" @keyword.control.return + +[ + "defined" + "#define" + "#elif" + "#else" + "#endif" + "#if" + "#ifdef" + "#ifndef" + "#include" + (preproc_directive) ] @keyword.directive -"--" @operator -"-" @operator -"-=" @operator -"->" @operator -"=" @operator -"!=" @operator -"*" @operator -"&" @operator -"&&" @operator -"+" @operator -"++" @operator -"+=" @operator -"<" @operator -"==" @operator -">" @operator -"||" @operator -">=" @operator -"<=" @operator +[ + "+" + "-" + "*" + "/" + "++" + "--" + "%" + "==" + "!=" + ">" + "<" + ">=" + "<=" + "&&" + "||" + "!" + "&" + "|" + "^" + "~" + "<<" + ">>" + "=" + "+=" + "-=" + "*=" + "/=" + "%=" + "<<=" + ">>=" + "&=" + "^=" + "|=" + "?" +] @operator -"." @punctuation.delimiter -";" @punctuation.delimiter +(conditional_expression ":" @operator) + +"..." @punctuation + +["," "." ":" ";" "->" "::"] @punctuation.delimiter + +["(" ")" "[" "]" "{" "}"] @punctuation.bracket [(true) (false)] @constant.builtin.boolean -(enumerator) @type.enum.variant +(enumerator name: (identifier) @type.enum.variant) (string_literal) @string (system_lib_string) @string @@ -73,19 +112,28 @@ (call_expression function: (field_expression field: (field_identifier) @function)) +(call_expression (argument_list (identifier) @variable)) (function_declarator - declarator: (identifier) @function) + declarator: [(identifier) (field_identifier)] @function) +(parameter_declaration + declarator: (identifier) @variable.parameter) +(parameter_declaration + (pointer_declarator + declarator: (identifier) @variable.parameter)) (preproc_function_def name: (identifier) @function.special) +(attribute + name: (identifier) @attribute) + (field_identifier) @variable.other.member (statement_identifier) @label (type_identifier) @type -(primitive_type) @type +(primitive_type) @type.builtin (sized_type_specifier) @type ((identifier) @constant - (#match? @constant "^[A-Z][A-Z\\d_]*$")) + (#match? @constant "^[A-Z][A-Z\\d_]*$")) (identifier) @variable diff --git a/runtime/queries/cpp/highlights.scm b/runtime/queries/cpp/highlights.scm index 3348ef3ca..11877a761 100644 --- a/runtime/queries/cpp/highlights.scm +++ b/runtime/queries/cpp/highlights.scm @@ -1,5 +1,3 @@ -; inherits: c - ; Functions (call_expression @@ -12,56 +10,106 @@ (template_method name: (field_identifier) @function) -(template_function - name: (identifier) @function) - (function_declarator declarator: (qualified_identifier name: (identifier) @function)) (function_declarator declarator: (qualified_identifier - name: (identifier) @function)) + name: (qualified_identifier + name: (identifier) @function))) (function_declarator declarator: (field_identifier) @function) ; Types -((namespace_identifier) @type - (#match? @type "^[A-Z]")) +(using_declaration ("using" "namespace" (identifier) @namespace)) +(using_declaration ("using" "namespace" (qualified_identifier name: (identifier) @namespace))) +(namespace_definition name: (identifier) @namespace) +(namespace_identifier) @namespace + +(qualified_identifier name: (identifier) @type.enum.variant) (auto) @type +"decltype" @type ; Constants (this) @variable.builtin -(nullptr) @constant +(nullptr) @constant.builtin ; Keywords -"catch" @keyword -"class" @keyword -"constexpr" @keyword -"delete" @keyword -"explicit" @keyword -"final" @keyword -"friend" @keyword -"mutable" @keyword -"namespace" @keyword -"noexcept" @keyword -"new" @keyword -"override" @keyword -"private" @keyword -"protected" @keyword -"public" @keyword -"template" @keyword -"throw" @keyword -"try" @keyword -"typename" @keyword -"using" @keyword -"virtual" @keyword +(template_argument_list (["<" ">"] @punctuation.bracket)) +(template_parameter_list (["<" ">"] @punctuation.bracket)) +(default_method_clause "default" @keyword) + +"static_assert" @function.special + +[ + "<=>" + "[]" + "()" +] @operator + +[ + "co_await" + "co_return" + "co_yield" + "concept" + "delete" + "final" + "new" + "operator" + "requires" + "using" +] @keyword + +[ + "catch" + "noexcept" + "throw" + "try" +] @keyword.control.exception + + +[ + "and" + "and_eq" + "bitor" + "bitand" + "not" + "not_eq" + "or" + "or_eq" + "xor" + "xor_eq" +] @keyword.operator + +[ + "class" + "namespace" + "typename" +] @keyword.storage.type + +[ + "constexpr" + "constinit" + "consteval" + "explicit" + "friend" + "mutable" + "private" + "protected" + "public" + "override" + "template" + "virtual" +] @keyword.storage.modifier ; Strings (raw_string_literal) @string + +; inherits: c diff --git a/runtime/queries/wgsl/highlights.scm b/runtime/queries/wgsl/highlights.scm index baf9dd8fc..2817ea3a3 100644 --- a/runtime/queries/wgsl/highlights.scm +++ b/runtime/queries/wgsl/highlights.scm @@ -2,57 +2,26 @@ (float_literal) @constant.numeric.float (bool_literal) @constant.builtin.boolean -(global_constant_declaration) @variable -(global_variable_declaration) @variable -(compound_statement) @variable -(const_expression) @function - -(variable_identifier_declaration - (identifier) @variable - (type_declaration) @type) - -(function_declaration - (identifier) @function - (function_return_type_declaration - (type_declaration) @type)) - -(parameter - (variable_identifier_declaration - (identifier) @variable.parameter - (type_declaration) @type)) - -(struct_declaration - (identifier) @type) - -(struct_declaration - (struct_member - (variable_identifier_declaration - (identifier) @variable.other.member - (type_declaration) @type))) - -(type_constructor_or_function_call_expression - (type_declaration) @function) +[ + "bitcast" + "discard" + "enable" + "fallthrough" +] @keyword [ - "struct" - "bitcast" - "discard" - "enable" - "fallthrough" - "fn" - "let" - "private" - "read" - "read_write" - "storage" - "type" - "uniform" - "var" - "workgroup" - "write" - "override" - (texel_format) -] @keyword + "let" + "override" + "struct" + "type" + "var" + (texel_format) +] @keyword.storage.type + +[ + (access_mode) + (address_space) +] @keyword.storage.modifier "fn" @keyword.function @@ -62,53 +31,87 @@ ["(" ")" "[" "]" "{" "}"] @punctuation.bracket +(type_declaration ["<" ">"] @punctuation.bracket) + [ - "loop" - "for" - "while" - "break" - "continue" - "continuing" + "break" + "continue" + "continuing" +] @keyword.control + +[ + "loop" + "for" + "while" ] @keyword.control.repeat [ - "if" - "else" - "switch" - "case" - "default" + "if" + "else" + "switch" + "case" + "default" ] @keyword.control.conditional [ - "&" - "&&" - "/" - "!" - "=" - "==" - "!=" - ">" - ">=" - ">>" - "<" - "<=" - "<<" - "%" - "-" - "+" - "|" - "||" - "*" - "~" - "^" - "@" - "++" - "--" + "!" + "!=" + "%" + "%=" + "&" + "&&" + "&=" + "*" + "*=" + "+" + "++" + "+=" + "-" + "--" + "-=" + "->" + "/" + "/=" + "<" + "<<" + "<=" + "=" + "==" + ">" + ">=" + ">>" + "@" + "^" + "^=" + "|" + "|=" + "||" + "~" ] @operator +(function_declaration + (identifier) @function) + +(parameter + (variable_identifier_declaration + (identifier) @variable.parameter)) + +(struct_declaration + (identifier) @type) + +(struct_declaration + (struct_member + (variable_identifier_declaration + (identifier) @variable.other.member))) + +(type_constructor_or_function_call_expression + (type_declaration (identifier) @function)) + +(type_declaration _ @type) + (attribute - (identifier) @attribute) + (identifier) @attribute) + +(identifier) @variable (comment) @comment - -(ERROR) @error