neovim/runtime/queries/vim/highlights.scm
Christian Clason f5dc453109 feat(treesitter)!: new standard capture names
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.
2024-01-21 10:41:18 +01:00

349 lines
4.3 KiB
Scheme

(identifier) @variable
((identifier) @constant
(#lua-match? @constant "^[A-Z][A-Z_0-9]*$"))
; Keywords
[
"if"
"else"
"elseif"
"endif"
] @keyword.conditional
[
"try"
"catch"
"finally"
"endtry"
"throw"
] @keyword.exception
[
"for"
"endfor"
"in"
"while"
"endwhile"
"break"
"continue"
] @keyword.repeat
[
"function"
"endfunction"
] @keyword.function
; Function related
(function_declaration
name: (_) @function)
(call_expression
function: (identifier) @function.call)
(call_expression
function:
(scoped_identifier
(identifier) @function.call))
(parameters
(identifier) @variable.parameter)
(default_parameter
(identifier) @variable.parameter)
[
(bang)
(spread)
] @punctuation.special
[
(no_option)
(inv_option)
(default_option)
(option_name)
] @variable.builtin
[
(scope)
"a:"
"$"
] @module
; Commands and user defined commands
[
"let"
"unlet"
"const"
"call"
"execute"
"normal"
"set"
"setfiletype"
"setlocal"
"silent"
"echo"
"echon"
"echohl"
"echomsg"
"echoerr"
"autocmd"
"augroup"
"return"
"syntax"
"filetype"
"source"
"lua"
"ruby"
"perl"
"python"
"highlight"
"command"
"delcommand"
"comclear"
"colorscheme"
"scriptencoding"
"startinsert"
"stopinsert"
"global"
"runtime"
"wincmd"
"cnext"
"cprevious"
"cNext"
"vertical"
"leftabove"
"aboveleft"
"rightbelow"
"belowright"
"topleft"
"botright"
(unknown_command_name)
"edit"
"enew"
"find"
"ex"
"visual"
"view"
"eval"
"sign"
] @keyword
(map_statement
cmd: _ @keyword)
(command_name) @function.macro
; Filetype command
(filetype_statement
[
"detect"
"plugin"
"indent"
"on"
"off"
] @keyword)
; Syntax command
(syntax_statement
(keyword) @string)
(syntax_statement
[
"enable"
"on"
"off"
"reset"
"case"
"spell"
"foldlevel"
"iskeyword"
"keyword"
"match"
"cluster"
"region"
"clear"
"include"
] @keyword)
(syntax_argument
name: _ @keyword)
[
"<buffer>"
"<nowait>"
"<silent>"
"<script>"
"<expr>"
"<unique>"
] @constant.builtin
(augroup_name) @module
(au_event) @constant
(normal_statement
(commands) @constant)
; Highlight command
(hl_attribute
key: _ @property
val: _ @constant)
(hl_group) @type
(highlight_statement
[
"default"
"link"
"clear"
] @keyword)
; Command command
(command) @string
(command_attribute
name: _ @property
val:
(behavior
name: _ @constant
val: (identifier)? @function)?)
; Edit command
(plus_plus_opt
val: _? @constant) @property
(plus_cmd
"+" @property) @property
; Runtime command
(runtime_statement
(where) @keyword.operator)
; Colorscheme command
(colorscheme_statement
(name) @string)
; Scriptencoding command
(scriptencoding_statement
(encoding) @string.special)
; Literals
(string_literal) @string
(integer_literal) @number
(float_literal) @number.float
(comment) @comment @spell
(line_continuation_comment) @comment @spell
(pattern) @string.special
(pattern_multi) @string.regexp
(filename) @string.special.path
(heredoc
(body) @string)
(heredoc
(parameter) @keyword)
[
(marker_definition)
(endmarker)
] @label
(literal_dictionary
(literal_key) @property)
((scoped_identifier
(scope) @_scope
.
(identifier) @boolean)
(#eq? @_scope "v:")
(#any-of? @boolean "true" "false"))
; Operators
[
"||"
"&&"
"&"
"+"
"-"
"*"
"/"
"%"
".."
"is"
"isnot"
"=="
"!="
">"
">="
"<"
"<="
"=~"
"!~"
"="
"+="
"-="
"*="
"/="
"%="
".="
"..="
"<<"
"=<<"
(match_case)
] @operator
; Some characters have different meanings based on the context
(unary_operation
"!" @operator)
(binary_operation
"." @operator)
; Punctuation
[
"("
")"
"{"
"}"
"["
"]"
"#{"
] @punctuation.bracket
(field_expression
"." @punctuation.delimiter)
[
","
":"
] @punctuation.delimiter
(ternary_expression
[
"?"
":"
] @keyword.conditional.ternary)
; Options
((set_value) @number
(#lua-match? @number "^[%d]+(%.[%d]+)?$"))
(inv_option
"!" @operator)
(set_item
"?" @operator)
((set_item
option: (option_name) @_option
value: (set_value) @function)
(#any-of? @_option "tagfunc" "tfu" "completefunc" "cfu" "omnifunc" "ofu" "operatorfunc" "opfunc"))