From 3836eeb90182cc610ea15bf6bd83cbc720bb7c64 Mon Sep 17 00:00:00 2001 From: Christian Clason Date: Sat, 12 Aug 2023 18:12:49 +0200 Subject: [PATCH] feat(treesitter): update C queries from upstream --- runtime/queries/c/highlights.scm | 49 ++++++++++++++++++- runtime/queries/c/injections.scm | 20 +++++++- test/functional/treesitter/highlight_spec.lua | 6 +-- 3 files changed, 68 insertions(+), 7 deletions(-) diff --git a/runtime/queries/c/highlights.scm b/runtime/queries/c/highlights.scm index ef70a7103c..29fb5747ca 100644 --- a/runtime/queries/c/highlights.scm +++ b/runtime/queries/c/highlights.scm @@ -1,5 +1,6 @@ ; Lower priority to prefer @parameter when identifier appears in parameter_declaration. ((identifier) @variable (#set! "priority" 95)) +(preproc_def (preproc_arg) @variable) [ "default" @@ -16,6 +17,7 @@ "sizeof" "offsetof" ] @keyword.operator +(alignof_expression . _ @keyword.operator) "return" @keyword.return @@ -141,8 +143,9 @@ (storage_class_specifier) @storageclass [ - (type_qualifier) + (type_qualifier) (gnu_asm_qualifier) + "__extension__" ] @type.qualifier (linkage_specification @@ -157,13 +160,52 @@ ((identifier) @constant (#lua-match? @constant "^[A-Z][A-Z0-9_]+$")) +(preproc_def (preproc_arg) @constant + (#lua-match? @constant "^[A-Z][A-Z0-9_]+$")) (enumerator name: (identifier) @constant) (case_statement value: (identifier) @constant) ((identifier) @constant.builtin - (#any-of? @constant.builtin "stderr" "stdin" "stdout")) + (#any-of? @constant.builtin + "stderr" "stdin" "stdout" + "__FILE__" "__LINE__" "__DATE__" "__TIME__" + "__STDC__" "__STDC_VERSION__" "__STDC_HOSTED__" + "__cplusplus" "__OBJC__" "__ASSEMBLER__" + "__BASE_FILE__" "__FILE_NAME__" "__INCLUDE_LEVEL__" + "__TIMESTAMP__" "__clang__" "__clang_major__" + "__clang_minor__" "__clang_patchlevel__" + "__clang_version__" "__clang_literal_encoding__" + "__clang_wide_literal_encoding__" + "__FUNCTION__" "__func__" "__PRETTY_FUNCTION__" + "__VA_ARGS__" "__VA_OPT__")) +(preproc_def (preproc_arg) @constant.builtin + (#any-of? @constant.builtin + "stderr" "stdin" "stdout" + "__FILE__" "__LINE__" "__DATE__" "__TIME__" + "__STDC__" "__STDC_VERSION__" "__STDC_HOSTED__" + "__cplusplus" "__OBJC__" "__ASSEMBLER__" + "__BASE_FILE__" "__FILE_NAME__" "__INCLUDE_LEVEL__" + "__TIMESTAMP__" "__clang__" "__clang_major__" + "__clang_minor__" "__clang_patchlevel__" + "__clang_version__" "__clang_literal_encoding__" + "__clang_wide_literal_encoding__" + "__FUNCTION__" "__func__" "__PRETTY_FUNCTION__" + "__VA_ARGS__" "__VA_OPT__")) + +(attribute_specifier + (argument_list (identifier) @variable.builtin)) +((attribute_specifier + (argument_list (call_expression + function: (identifier) @variable.builtin)))) + +((call_expression + function: (identifier) @function.builtin) + (#lua-match? @function.builtin "^__builtin_")) +((call_expression + function: (identifier) @function.builtin) + (#has-ancestor? @function.builtin attribute_specifier)) ;; Preproc def / undef (preproc_def @@ -196,6 +238,9 @@ (parameter_declaration declarator: (identifier) @parameter) +(parameter_declaration + declarator: (array_declarator) @parameter) + (parameter_declaration declarator: (pointer_declarator) @parameter) diff --git a/runtime/queries/c/injections.scm b/runtime/queries/c/injections.scm index 3b99c7a444..5a49e20df5 100644 --- a/runtime/queries/c/injections.scm +++ b/runtime/queries/c/injections.scm @@ -1,5 +1,21 @@ -; ((preproc_arg) @injection.content -; (#set! injection.language "c")) +((preproc_def + (preproc_arg) @injection.content) + (#lua-match? @injection.content "\n") + (#set! injection.language "c")) + +(preproc_function_def + (preproc_arg) @injection.content + (#set! injection.language "c")) + +(preproc_call + (preproc_arg) @injection.content + (#set! injection.language "c")) ; ((comment) @injection.content ; (#set! injection.language "comment")) + +; TODO: add when asm is added +; (gnu_asm_expression assembly_code: (string_literal) @injection.content +; (#set! injection.language "asm")) +; (gnu_asm_expression assembly_code: (concatenated_string (string_literal) @injection.content) +; (#set! injection.language "asm")) diff --git a/test/functional/treesitter/highlight_spec.lua b/test/functional/treesitter/highlight_spec.lua index dc303c564f..c88c5cd3e5 100644 --- a/test/functional/treesitter/highlight_spec.lua +++ b/test/functional/treesitter/highlight_spec.lua @@ -580,9 +580,9 @@ describe('treesitter highlighting (C)', function() -- expect everything to have Constant highlight screen:expect{grid=[[ {12:int}{8: x = INT_MAX;} | - {8:#define READ_STRING(x, y) (char *)read_string((x), (size_t)(y))} | - {8:#define foo void main() { \} | - {8: return 42; \} | + {8:#define READ_STRING(x, y) (}{12:char}{8: *)read_string((x), (}{12:size_t}{8:)(y))} | + {8:#define foo }{12:void}{8: main() { \} | + {8: }{12:return}{8: 42; \} | {8: }} | ^ | {1:~ }|