mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 19:38:20 +00:00

Problem: Sharing queries with upstream and Helix is difficult due to different capture names. Solution: Define and document a new set of standard captures that matches tree-sitter "standard captures" (where defined) and is closer to Helix' Atom-style nested groups. This is a breaking change for colorschemes that defined highlights based on the old captures. On the other hand, the default colorscheme now defines links for all standard captures (not just those used in bundled queries), improving the out-of-the-box experience.
330 lines
6.0 KiB
Scheme
330 lines
6.0 KiB
Scheme
; Lower priority to prefer @variable.parameter when identifier appears in parameter_declaration.
|
|
((identifier) @variable
|
|
(#set! "priority" 95))
|
|
|
|
(preproc_def
|
|
(preproc_arg) @variable)
|
|
|
|
[
|
|
"default"
|
|
"enum"
|
|
"struct"
|
|
"typedef"
|
|
"union"
|
|
"goto"
|
|
"asm"
|
|
"__asm__"
|
|
] @keyword
|
|
|
|
[
|
|
"sizeof"
|
|
"offsetof"
|
|
] @keyword.operator
|
|
|
|
(alignof_expression
|
|
.
|
|
_ @keyword.operator)
|
|
|
|
"return" @keyword.return
|
|
|
|
[
|
|
"while"
|
|
"for"
|
|
"do"
|
|
"continue"
|
|
"break"
|
|
] @keyword.repeat
|
|
|
|
[
|
|
"if"
|
|
"else"
|
|
"case"
|
|
"switch"
|
|
] @keyword.conditional
|
|
|
|
[
|
|
"#if"
|
|
"#ifdef"
|
|
"#ifndef"
|
|
"#else"
|
|
"#elif"
|
|
"#endif"
|
|
"#elifdef"
|
|
"#elifndef"
|
|
(preproc_directive)
|
|
] @keyword.directive
|
|
|
|
"#define" @keyword.directive.define
|
|
|
|
"#include" @keyword.import
|
|
|
|
[
|
|
";"
|
|
":"
|
|
","
|
|
"::"
|
|
] @punctuation.delimiter
|
|
|
|
"..." @punctuation.special
|
|
|
|
[
|
|
"("
|
|
")"
|
|
"["
|
|
"]"
|
|
"{"
|
|
"}"
|
|
] @punctuation.bracket
|
|
|
|
[
|
|
"="
|
|
"-"
|
|
"*"
|
|
"/"
|
|
"+"
|
|
"%"
|
|
"~"
|
|
"|"
|
|
"&"
|
|
"^"
|
|
"<<"
|
|
">>"
|
|
"->"
|
|
"."
|
|
"<"
|
|
"<="
|
|
">="
|
|
">"
|
|
"=="
|
|
"!="
|
|
"!"
|
|
"&&"
|
|
"||"
|
|
"-="
|
|
"+="
|
|
"*="
|
|
"/="
|
|
"%="
|
|
"|="
|
|
"&="
|
|
"^="
|
|
">>="
|
|
"<<="
|
|
"--"
|
|
"++"
|
|
] @operator
|
|
|
|
; Make sure the comma operator is given a highlight group after the comma
|
|
; punctuator so the operator is highlighted properly.
|
|
(comma_expression
|
|
"," @operator)
|
|
|
|
[
|
|
(true)
|
|
(false)
|
|
] @boolean
|
|
|
|
(conditional_expression
|
|
[
|
|
"?"
|
|
":"
|
|
] @keyword.conditional.ternary)
|
|
|
|
(string_literal) @string
|
|
|
|
(system_lib_string) @string
|
|
|
|
(escape_sequence) @string.escape
|
|
|
|
(null) @constant.builtin
|
|
|
|
(number_literal) @number
|
|
|
|
(char_literal) @character
|
|
|
|
((preproc_arg) @function.macro
|
|
(#set! "priority" 90))
|
|
|
|
(preproc_defined) @function.macro
|
|
|
|
((field_expression
|
|
(field_identifier) @property) @_parent
|
|
(#not-has-parent? @_parent template_method function_declarator call_expression))
|
|
|
|
(field_designator) @property
|
|
|
|
((field_identifier) @property
|
|
(#has-ancestor? @property field_declaration)
|
|
(#not-has-ancestor? @property function_declarator))
|
|
|
|
(statement_identifier) @label
|
|
|
|
[
|
|
(type_identifier)
|
|
(type_descriptor)
|
|
] @type
|
|
|
|
(storage_class_specifier) @keyword.storage
|
|
|
|
[
|
|
(type_qualifier)
|
|
(gnu_asm_qualifier)
|
|
"__extension__"
|
|
] @type.qualifier
|
|
|
|
(linkage_specification
|
|
"extern" @keyword.storage)
|
|
|
|
(type_definition
|
|
declarator: (type_identifier) @type.definition)
|
|
|
|
(primitive_type) @type.builtin
|
|
|
|
(sized_type_specifier
|
|
_ @type.builtin
|
|
type: _?)
|
|
|
|
((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
|
|
; format-ignore
|
|
(#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
|
|
; format-ignore
|
|
(#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
|
|
name: (_) @constant)
|
|
|
|
(preproc_call
|
|
directive: (preproc_directive) @_u
|
|
argument: (_) @constant
|
|
(#eq? @_u "#undef"))
|
|
|
|
(call_expression
|
|
function: (identifier) @function.call)
|
|
|
|
(call_expression
|
|
function:
|
|
(field_expression
|
|
field: (field_identifier) @function.call))
|
|
|
|
(function_declarator
|
|
declarator: (identifier) @function)
|
|
|
|
(function_declarator
|
|
declarator:
|
|
(parenthesized_declarator
|
|
(pointer_declarator
|
|
declarator: (field_identifier) @function)))
|
|
|
|
(preproc_function_def
|
|
name: (identifier) @function.macro)
|
|
|
|
(comment) @comment @spell
|
|
|
|
((comment) @comment.documentation
|
|
(#lua-match? @comment.documentation "^/[*][*][^*].*[*]/$"))
|
|
|
|
; Parameters
|
|
(parameter_declaration
|
|
declarator: (identifier) @variable.parameter)
|
|
|
|
(parameter_declaration
|
|
declarator: (array_declarator) @variable.parameter)
|
|
|
|
(parameter_declaration
|
|
declarator: (pointer_declarator) @variable.parameter)
|
|
|
|
; K&R functions
|
|
; To enable support for K&R functions,
|
|
; add the following lines to your own query config and uncomment them.
|
|
; They are commented out as they'll conflict with C++
|
|
; Note that you'll need to have `; extends` at the top of your query file.
|
|
;
|
|
; (parameter_list (identifier) @variable.parameter)
|
|
;
|
|
; (function_definition
|
|
; declarator: _
|
|
; (declaration
|
|
; declarator: (identifier) @variable.parameter))
|
|
;
|
|
; (function_definition
|
|
; declarator: _
|
|
; (declaration
|
|
; declarator: (array_declarator) @variable.parameter))
|
|
;
|
|
; (function_definition
|
|
; declarator: _
|
|
; (declaration
|
|
; declarator: (pointer_declarator) @variable.parameter))
|
|
(preproc_params
|
|
(identifier) @variable.parameter)
|
|
|
|
[
|
|
"__attribute__"
|
|
"__declspec"
|
|
"__based"
|
|
"__cdecl"
|
|
"__clrcall"
|
|
"__stdcall"
|
|
"__fastcall"
|
|
"__thiscall"
|
|
"__vectorcall"
|
|
(ms_pointer_modifier)
|
|
(attribute_declaration)
|
|
] @attribute
|