aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Clason <c.clason@uni-graz.at>2023-08-12 18:12:49 +0200
committerChristian Clason <c.clason@uni-graz.at>2023-08-13 12:30:47 +0200
commit3836eeb90182cc610ea15bf6bd83cbc720bb7c64 (patch)
treecec3d59f115c5f90d2932a5d18a105395d55d8cb
parentc3dd84e76fd80032f0076b0cb17090bd8f21d2fb (diff)
downloadrneovim-3836eeb90182cc610ea15bf6bd83cbc720bb7c64.tar.gz
rneovim-3836eeb90182cc610ea15bf6bd83cbc720bb7c64.tar.bz2
rneovim-3836eeb90182cc610ea15bf6bd83cbc720bb7c64.zip
feat(treesitter): update C queries from upstream
-rw-r--r--runtime/queries/c/highlights.scm49
-rw-r--r--runtime/queries/c/injections.scm20
-rw-r--r--test/functional/treesitter/highlight_spec.lua6
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
@@ -197,6 +239,9 @@
declarator: (identifier) @parameter)
(parameter_declaration
+ declarator: (array_declarator) @parameter)
+
+(parameter_declaration
declarator: (pointer_declarator) @parameter)
(preproc_params (identifier) @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:~ }|