From ad505e6568fa3979892bf2da599fdb6ba7a35d73 Mon Sep 17 00:00:00 2001 From: Caio Piccirillo Date: Sat, 23 Aug 2025 15:58:38 -0300 Subject: [PATCH 1/2] feat: Enhance highlight for C++20 keywords --- Cargo.lock | 3 +- Cargo.toml | 2 +- crates/languages/src/cpp/highlights.scm | 86 ++++++++++++++++++++----- 3 files changed, 71 insertions(+), 20 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6964ed4890..250f17af8b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -17182,8 +17182,7 @@ dependencies = [ [[package]] name = "tree-sitter-cpp" version = "0.23.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df2196ea9d47b4ab4a31b9297eaa5a5d19a0b121dceb9f118f6790ad0ab94743" +source = "git+https://github.com/tree-sitter/tree-sitter-cpp?rev=5cb9b693cfd7bfacab1d9ff4acac1a4150700609#5cb9b693cfd7bfacab1d9ff4acac1a4150700609" dependencies = [ "cc", "tree-sitter-language", diff --git a/Cargo.toml b/Cargo.toml index 6ec243a9b9..209c312aec 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -624,7 +624,7 @@ tower-http = "0.4.4" tree-sitter = { version = "0.25.6", features = ["wasm"] } tree-sitter-bash = "0.25.0" tree-sitter-c = "0.23" -tree-sitter-cpp = "0.23" +tree-sitter-cpp = { git = "https://github.com/tree-sitter/tree-sitter-cpp", rev = "5cb9b693cfd7bfacab1d9ff4acac1a4150700609" } tree-sitter-css = "0.23" tree-sitter-diff = "0.1.0" tree-sitter-elixir = "0.3" diff --git a/crates/languages/src/cpp/highlights.scm b/crates/languages/src/cpp/highlights.scm index 6fa8bd7b08..f89e0b9c21 100644 --- a/crates/languages/src/cpp/highlights.scm +++ b/crates/languages/src/cpp/highlights.scm @@ -3,8 +3,36 @@ (namespace_identifier) @namespace (concept_definition - (identifier) @concept) + name: (identifier) @concept) +(requires_clause + constraint: (template_type + name: (type_identifier) @concept)) + +(module_name + (identifier) @module) + +(module_declaration + name: (module_name + (identifier) @module)) + +(import_declaration + name: (module_name + (identifier) @module)) + +(import_declaration + partition: (module_partition + (module_name + (identifier) @module))) + +(co_await_expression + operator: "co_await" @keyword.operator) + +(co_return_statement + "co_return" @keyword.operator) + +(co_yield_statement + "co_yield" @keyword.operator) (call_expression function: (qualified_identifier @@ -61,6 +89,9 @@ (operator_name (identifier)? @operator) @function +(operator_name + "<=>" @operator.spaceship) + (destructor_name (identifier) @function) ((namespace_identifier) @type @@ -68,21 +99,17 @@ (auto) @type (type_identifier) @type -type :(primitive_type) @type.primitive -(sized_type_specifier) @type.primitive - -(requires_clause - constraint: (template_type - name: (type_identifier) @concept)) +type: (primitive_type) @type.builtin +(sized_type_specifier) @type.builtin (attribute - name: (identifier) @keyword) + name: (identifier) @attribute) -((identifier) @constant - (#match? @constant "^_*[A-Z][A-Z\\d_]*$")) +((identifier) @constant.builtin + (#match? @constant.builtin "^_*[A-Z][A-Z\\d_]*$")) (statement_identifier) @label -(this) @variable.special +(this) @variable.builtin ("static_assert") @function.builtin [ @@ -92,11 +119,10 @@ type :(primitive_type) @type.primitive "case" "catch" "class" - "co_await" - "co_return" - "co_yield" "concept" + "consteval" "constexpr" + "constinit" "continue" "decltype" "default" @@ -105,15 +131,20 @@ type :(primitive_type) @type.primitive "else" "enum" "explicit" + "export" "extern" "final" "for" "friend" + "goto" "if" + "import" "inline" + "module" "namespace" "new" "noexcept" + "operator" "override" "private" "protected" @@ -124,6 +155,7 @@ type :(primitive_type) @type.primitive "struct" "switch" "template" + "thread_local" "throw" "try" "typedef" @@ -136,6 +168,12 @@ type :(primitive_type) @type.primitive (type_qualifier) ] @keyword +[ + "co_await" + "co_return" + "co_yield" +] @keyword.operator + [ "#define" "#elif" @@ -146,7 +184,7 @@ type :(primitive_type) @type.primitive "#ifndef" "#include" (preproc_directive) -] @keyword +] @keyword.directive (comment) @comment @@ -224,10 +262,24 @@ type :(primitive_type) @type.primitive ">" "<=" ">=" - "<=>" - "||" "?" + "and" + "and_eq" + "bitand" + "bitor" + "compl" + "not" + "not_eq" + "or" + "or_eq" + "xor" + "xor_eq" ] @operator +"<=>" @operator.spaceship + +(binary_expression + operator: "<=>" @operator.spaceship) + (conditional_expression ":" @operator) (user_defined_literal (literal_suffix) @operator) From 2596c350cd232dc213162bc43969536cf7cbf456 Mon Sep 17 00:00:00 2001 From: Caio Piccirillo Date: Mon, 25 Aug 2025 09:42:53 -0300 Subject: [PATCH 2/2] fix: Move coroutines keywords to similar control flow highlight --- crates/languages/src/cpp/highlights.scm | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/crates/languages/src/cpp/highlights.scm b/crates/languages/src/cpp/highlights.scm index f89e0b9c21..bd988445bb 100644 --- a/crates/languages/src/cpp/highlights.scm +++ b/crates/languages/src/cpp/highlights.scm @@ -25,15 +25,6 @@ (module_name (identifier) @module))) -(co_await_expression - operator: "co_await" @keyword.operator) - -(co_return_statement - "co_return" @keyword.operator) - -(co_yield_statement - "co_yield" @keyword.operator) - (call_expression function: (qualified_identifier name: (identifier) @function)) @@ -119,6 +110,9 @@ type: (primitive_type) @type.builtin "case" "catch" "class" + "co_await" + "co_return" + "co_yield" "concept" "consteval" "constexpr" @@ -168,12 +162,6 @@ type: (primitive_type) @type.builtin (type_qualifier) ] @keyword -[ - "co_await" - "co_return" - "co_yield" -] @keyword.operator - [ "#define" "#elif"