diff --git a/packages/language-c/grammars/modern-tree-sitter-c.cson b/packages/language-c/grammars/modern-tree-sitter-c.cson index ea096b2707..99e62ea807 100644 --- a/packages/language-c/grammars/modern-tree-sitter-c.cson +++ b/packages/language-c/grammars/modern-tree-sitter-c.cson @@ -17,3 +17,6 @@ fileTypes: [ 'c' 'h.in' ] + +comments: + start: '// ' diff --git a/packages/language-c/grammars/modern-tree-sitter-cpp.cson b/packages/language-c/grammars/modern-tree-sitter-cpp.cson index 38a8bcb5a0..98352d101f 100644 --- a/packages/language-c/grammars/modern-tree-sitter-cpp.cson +++ b/packages/language-c/grammars/modern-tree-sitter-cpp.cson @@ -6,6 +6,7 @@ parser: 'tree-sitter-cpp' injectionRegex: '^(c|C)(\\+\\+|pp|PP)$' treeSitter: + parserSource: 'github:tree-sitter/tree-sitter-cpp#a90f170f92d5d70e7c2d4183c146e61ba5f3a457' grammar: 'tree-sitter-cpp/tree-sitter-cpp.wasm' highlightsQuery: 'tree-sitter-cpp/highlights.scm' tagsQuery: 'tree-sitter-cpp/tags.scm' @@ -33,3 +34,6 @@ fileTypes: [ ] contentRegex: '\n\\s*(namespace|class|template)\\s+' + +comments: + start: '// ' diff --git a/packages/language-c/grammars/tree-sitter-cpp/highlights.scm b/packages/language-c/grammars/tree-sitter-cpp/highlights.scm index a784796231..ec7c35fa75 100644 --- a/packages/language-c/grammars/tree-sitter-cpp/highlights.scm +++ b/packages/language-c/grammars/tree-sitter-cpp/highlights.scm @@ -51,12 +51,14 @@ (primitive_type) @support.type.builtin.cpp -; Type parameters -(template_argument_list - (type_descriptor - type: (type_identifier) @variable.parameter.type.cpp - (#set! capture.final true))) +; Mark all function definition types with data… +(function_definition + type: (_) @_IGNORE_ + (#set! functionDefinitionType true)) +; …so that we can detect when a type identifier is part of a template/generic. +((type_identifier) @variable.parameter.type.cpp + (#is? test.descendantOfNodeWithData functionDefinitionType)) (class_specifier (type_identifier) @entity.name.class.cpp @@ -150,6 +152,13 @@ name: (identifier) @support.other.function.cpp) (#set! capture.final true)) +; The "foo" in `troz::foo(...)`. +(call_expression + function: (qualified_identifier + name: (template_function + name: (identifier) @support.other.function.cpp)) + (#set! capture.final true)) + (call_expression (identifier) @support.other.function.cpp (#set! capture.final true)) @@ -272,7 +281,6 @@ (null) (true) (false) - (nullptr) ] @constant.language._TYPE_.cpp ((identifier) @constant.cpp diff --git a/packages/language-c/grammars/tree-sitter-cpp/tree-sitter-cpp.wasm b/packages/language-c/grammars/tree-sitter-cpp/tree-sitter-cpp.wasm index e841559654..ae93e20ae2 100755 Binary files a/packages/language-c/grammars/tree-sitter-cpp/tree-sitter-cpp.wasm and b/packages/language-c/grammars/tree-sitter-cpp/tree-sitter-cpp.wasm differ