aboutsummaryrefslogtreecommitdiffstats
path: root/runtime/queries/vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/queries/vim')
-rw-r--r--runtime/queries/vim/folds.scm4
-rw-r--r--runtime/queries/vim/highlights.scm354
-rw-r--r--runtime/queries/vim/injections.scm44
-rw-r--r--runtime/queries/vim/locals.scm19
4 files changed, 421 insertions, 0 deletions
diff --git a/runtime/queries/vim/folds.scm b/runtime/queries/vim/folds.scm
new file mode 100644
index 000000000..0a1fb695f
--- /dev/null
+++ b/runtime/queries/vim/folds.scm
@@ -0,0 +1,4 @@
+[
+ (if_statement)
+ (function_definition)
+] @fold
diff --git a/runtime/queries/vim/highlights.scm b/runtime/queries/vim/highlights.scm
new file mode 100644
index 000000000..df7b3cf48
--- /dev/null
+++ b/runtime/queries/vim/highlights.scm
@@ -0,0 +1,354 @@
+(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"
+ "abort"
+] @keyword
+
+(map_statement
+ cmd: _ @keyword)
+
+(keycode) @character.special
+
+(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
+[
+ "||"
+ "&&"
+ "&"
+ "+"
+ "-"
+ "*"
+ "/"
+ "%"
+ ".."
+ "=="
+ "!="
+ ">"
+ ">="
+ "<"
+ "<="
+ "=~"
+ "!~"
+ "="
+ "^="
+ "+="
+ "-="
+ "*="
+ "/="
+ "%="
+ ".="
+ "..="
+ "<<"
+ "=<<"
+ "->"
+ (match_case)
+] @operator
+
+[
+ "is"
+ "isnot"
+] @keyword.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"))
diff --git a/runtime/queries/vim/injections.scm b/runtime/queries/vim/injections.scm
new file mode 100644
index 000000000..30d11cbb4
--- /dev/null
+++ b/runtime/queries/vim/injections.scm
@@ -0,0 +1,44 @@
+(lua_statement
+ (script
+ (body) @injection.content
+ (#set! injection.language "lua")))
+
+(lua_statement
+ (chunk) @injection.content
+ (#set! injection.language "lua"))
+
+(ruby_statement
+ (script
+ (body) @injection.content
+ (#set! injection.language "ruby")))
+
+(ruby_statement
+ (chunk) @injection.content
+ (#set! injection.language "ruby"))
+
+(python_statement
+ (script
+ (body) @injection.content
+ (#set! injection.language "python")))
+
+(python_statement
+ (chunk) @injection.content
+ (#set! injection.language "python"))
+
+; If we support perl at some point...
+; (perl_statement (script (body) @perl))
+; (perl_statement (chunk) @perl)
+(autocmd_statement
+ (pattern) @injection.content
+ (#set! injection.language "regex"))
+
+((set_item
+ option: (option_name) @_option
+ value: (set_value) @injection.content)
+ (#any-of? @_option
+ "includeexpr" "inex" "printexpr" "pexpr" "formatexpr" "fex" "indentexpr" "inde" "foldtext" "fdt"
+ "foldexpr" "fde" "diffexpr" "dex" "patchexpr" "pex" "charconvert" "ccv")
+ (#set! injection.language "vim"))
+
+((comment) @injection.content
+ (#set! injection.language "comment"))
diff --git a/runtime/queries/vim/locals.scm b/runtime/queries/vim/locals.scm
new file mode 100644
index 000000000..870647279
--- /dev/null
+++ b/runtime/queries/vim/locals.scm
@@ -0,0 +1,19 @@
+[
+ (script_file)
+ (function_definition)
+] @local.scope
+
+(function_declaration
+ name: (identifier) @local.definition.function)
+
+(function_declaration
+ parameters: (parameters
+ (identifier) @local.definition.parameter))
+
+(let_statement
+ [
+ (scoped_identifier)
+ (identifier)
+ ] @local.definition.var)
+
+(identifier) @local.reference