mirror of
https://github.com/nvim-treesitter/nvim-treesitter.git
synced 2026-07-12 16:30:02 -04:00
Merge pull request #296 from steelsojka/feat-is-predicate
feat(highlights): add is predicate
This commit is contained in:
commit
4a747aa30c
16 changed files with 102 additions and 39 deletions
|
|
@ -109,6 +109,7 @@ are optional and will not have any effect for now.
|
||||||
builtin
|
builtin
|
||||||
macro
|
macro
|
||||||
@parameter
|
@parameter
|
||||||
|
reference references to parameters
|
||||||
|
|
||||||
@method
|
@method
|
||||||
@field or @property
|
@field or @property
|
||||||
|
|
|
||||||
|
|
@ -358,6 +358,10 @@ Rust.
|
||||||
*hl-TSParameter*
|
*hl-TSParameter*
|
||||||
For parameters of a function.
|
For parameters of a function.
|
||||||
|
|
||||||
|
`TSParameterReference`
|
||||||
|
*hl-TSParameterReference*
|
||||||
|
For references to parameters of a function.
|
||||||
|
|
||||||
`TSMethod`
|
`TSMethod`
|
||||||
*hl-TSMethod*
|
*hl-TSMethod*
|
||||||
For method calls and definitions.
|
For method calls and definitions.
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,9 @@ local info = require'nvim-treesitter.info'
|
||||||
local configs = require'nvim-treesitter.configs'
|
local configs = require'nvim-treesitter.configs'
|
||||||
local parsers = require'nvim-treesitter.parsers'
|
local parsers = require'nvim-treesitter.parsers'
|
||||||
|
|
||||||
|
-- Registers all query predicates
|
||||||
|
require"nvim-treesitter.query_predicates"
|
||||||
|
|
||||||
local M = {}
|
local M = {}
|
||||||
|
|
||||||
function M.setup()
|
function M.setup()
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,7 @@ hlmap["function"] = "TSFunction"
|
||||||
hlmap["function.builtin"] = "TSFuncBuiltin"
|
hlmap["function.builtin"] = "TSFuncBuiltin"
|
||||||
hlmap["function.macro"] = "TSFuncMacro"
|
hlmap["function.macro"] = "TSFuncMacro"
|
||||||
hlmap["parameter"] = "TSParameter"
|
hlmap["parameter"] = "TSParameter"
|
||||||
|
hlmap["parameter.reference"] = "TSParameterReference"
|
||||||
hlmap["method"] = "TSMethod"
|
hlmap["method"] = "TSMethod"
|
||||||
hlmap["field"] = "TSField"
|
hlmap["field"] = "TSField"
|
||||||
hlmap["property"] = "TSProperty"
|
hlmap["property"] = "TSProperty"
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,25 @@ local function error(str)
|
||||||
vim.api.nvim_err_writeln(str)
|
vim.api.nvim_err_writeln(str)
|
||||||
end
|
end
|
||||||
|
|
||||||
query.add_predicate("nth?", function(match, pattern, bufnr, pred)
|
local function valid_args(name, pred, count, strict_count)
|
||||||
if #pred ~= 3 then
|
local arg_count = #pred - 1
|
||||||
error("nth? must hav exactly two arguments")
|
|
||||||
return
|
if strict_count then
|
||||||
|
if arg_count ~= count then
|
||||||
|
error(string.format("%s must have exactly %d arguments", name, count))
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
elseif arg_count < count then
|
||||||
|
error(string.format("%s must have at least %d arguments", name, count))
|
||||||
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
query.add_predicate("nth?", function(match, pattern, bufnr, pred)
|
||||||
|
if not valid_args("nth?", pred, 2, true) then return end
|
||||||
|
|
||||||
local node = match[pred[2]]
|
local node = match[pred[2]]
|
||||||
local n = pred[3] - 1
|
local n = pred[3] - 1
|
||||||
if node and node:parent() and node:named_child_count() > n then
|
if node and node:parent() and node:named_child_count() > n then
|
||||||
|
|
@ -20,7 +33,7 @@ query.add_predicate("nth?", function(match, pattern, bufnr, pred)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
query.add_predicate('has-ancestor?', function(match, pattern, bufnr, pred)
|
query.add_predicate('has-ancestor?', function(match, pattern, bufnr, pred)
|
||||||
if #pred ~= 3 then error("has-ancestor? must have exactly two arguments!") return end
|
if not valid_args("has-ancestor?", pred, 2, true) then return end
|
||||||
|
|
||||||
local node = match[pred[2]]
|
local node = match[pred[2]]
|
||||||
local ancestor_type = pred[3]
|
local ancestor_type = pred[3]
|
||||||
|
|
@ -35,3 +48,18 @@ query.add_predicate('has-ancestor?', function(match, pattern, bufnr, pred)
|
||||||
end
|
end
|
||||||
return false
|
return false
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
query.add_predicate('is?', function(match, pattern, bufnr, pred)
|
||||||
|
if not valid_args("is?", pred, 2) then return end
|
||||||
|
|
||||||
|
-- Avoid circular dependencies
|
||||||
|
local locals = require"nvim-treesitter.locals"
|
||||||
|
local node = match[pred[2]]
|
||||||
|
local types = {unpack(pred, 3)}
|
||||||
|
|
||||||
|
if not node then return true end
|
||||||
|
|
||||||
|
local _, _, kind = locals.find_definition(node, bufnr)
|
||||||
|
|
||||||
|
return vim.tbl_contains(types, kind)
|
||||||
|
end)
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,7 @@ highlight default link TSFunction Function
|
||||||
highlight default link TSFuncBuiltin Special
|
highlight default link TSFuncBuiltin Special
|
||||||
highlight default link TSFuncMacro Macro
|
highlight default link TSFuncMacro Macro
|
||||||
highlight default link TSParameter Identifier
|
highlight default link TSParameter Identifier
|
||||||
|
highlight default link TSParameterReference TSParameter
|
||||||
highlight default link TSMethod Function
|
highlight default link TSMethod Function
|
||||||
highlight default link TSField Identifier
|
highlight default link TSField Identifier
|
||||||
highlight default link TSProperty Identifier
|
highlight default link TSProperty Identifier
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
[
|
[
|
||||||
"const"
|
"const"
|
||||||
"default"
|
"default"
|
||||||
"enum"
|
"enum"
|
||||||
|
|
@ -131,8 +131,10 @@
|
||||||
(comment) @comment
|
(comment) @comment
|
||||||
|
|
||||||
;; Parameters
|
;; Parameters
|
||||||
(parameter_list
|
(parameter_declaration
|
||||||
(parameter_declaration) @parameter)
|
declarator: (identifier) @parameter)
|
||||||
|
((identifier) @parameter.reference
|
||||||
|
(#is? @parameter.reference parameter))
|
||||||
|
|
||||||
(preproc_params
|
(preproc_params
|
||||||
(identifier)) @parameter
|
(identifier)) @parameter
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
(pointer_declarator
|
(pointer_declarator
|
||||||
declarator: (identifier) @definition.var)
|
declarator: (identifier) @definition.var)
|
||||||
(parameter_declaration
|
(parameter_declaration
|
||||||
declarator: (identifier) @definition.var)
|
declarator: (identifier) @definition.parameter)
|
||||||
(init_declarator
|
(init_declarator
|
||||||
declarator: (identifier) @definition.var)
|
declarator: (identifier) @definition.var)
|
||||||
(array_declarator
|
(array_declarator
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,12 @@
|
||||||
(#match? @field "_$"))
|
(#match? @field "_$"))
|
||||||
|
|
||||||
; function(Foo ...foo)
|
; function(Foo ...foo)
|
||||||
(variadic_parameter_declaration) @parameter
|
(variadic_parameter_declaration
|
||||||
|
declarator: (variadic_declarator
|
||||||
|
(identifier) @parameter))
|
||||||
|
; int foo = 0
|
||||||
|
(optional_parameter_declaration
|
||||||
|
declarator: (identifier) @parameter)
|
||||||
|
|
||||||
;(field_expression) @parameter ;; How to highlight this?
|
;(field_expression) @parameter ;; How to highlight this?
|
||||||
(template_function
|
(template_function
|
||||||
|
|
@ -42,20 +47,20 @@
|
||||||
(#match? @constructor "^[A-Z]"))
|
(#match? @constructor "^[A-Z]"))
|
||||||
|
|
||||||
(call_expression
|
(call_expression
|
||||||
function: (scoped_identifier
|
function: (scoped_identifier
|
||||||
name: (identifier) @function))
|
name: (identifier) @function))
|
||||||
|
|
||||||
(call_expression
|
(call_expression
|
||||||
function: (field_expression
|
function: (field_expression
|
||||||
field: (field_identifier) @function))
|
field: (field_identifier) @function))
|
||||||
|
|
||||||
((call_expression
|
((call_expression
|
||||||
function: (scoped_identifier
|
function: (scoped_identifier
|
||||||
name: (identifier) @constructor))
|
name: (identifier) @constructor))
|
||||||
(#match? @constructor "^[A-Z]"))
|
(#match? @constructor "^[A-Z]"))
|
||||||
|
|
||||||
((call_expression
|
((call_expression
|
||||||
function: (field_expression
|
function: (field_expression
|
||||||
field: (field_identifier) @constructor))
|
field: (field_identifier) @constructor))
|
||||||
(#match? @constructor "^[A-Z]"))
|
(#match? @constructor "^[A-Z]"))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,9 @@
|
||||||
|
;; Parameters
|
||||||
|
(variadic_parameter_declaration
|
||||||
|
declarator: (variadic_declarator
|
||||||
|
(identifier) @definition.parameter))
|
||||||
|
(optional_parameter_declaration
|
||||||
|
declarator: (identifier) @definition.parameter)
|
||||||
|
|
||||||
;; Class / struct defintions
|
;; Class / struct defintions
|
||||||
(class_specifier) @scope
|
(class_specifier) @scope
|
||||||
|
|
@ -10,14 +16,14 @@
|
||||||
(identifier) @definition.var)
|
(identifier) @definition.var)
|
||||||
|
|
||||||
(struct_specifier
|
(struct_specifier
|
||||||
name: (type_identifier) @definition.type)
|
name: (type_identifier) @definition.type)
|
||||||
|
|
||||||
(struct_specifier
|
(struct_specifier
|
||||||
name: (scoped_type_identifier
|
name: (scoped_type_identifier
|
||||||
name: (type_identifier) @definition.type))
|
name: (type_identifier) @definition.type))
|
||||||
|
|
||||||
(class_specifier
|
(class_specifier
|
||||||
name: (type_identifier) @definition.type)
|
name: (type_identifier) @definition.type)
|
||||||
|
|
||||||
(class_specifier
|
(class_specifier
|
||||||
name: (scoped_type_identifier
|
name: (scoped_type_identifier
|
||||||
|
|
@ -32,7 +38,7 @@
|
||||||
(template_declaration) @scope
|
(template_declaration) @scope
|
||||||
|
|
||||||
;; Namespaces
|
;; Namespaces
|
||||||
(namespace_definition
|
(namespace_definition
|
||||||
name: (identifier) @definition.namespace
|
name: (identifier) @definition.namespace
|
||||||
body: (_) @scope)
|
body: (_) @scope)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,17 @@
|
||||||
; Types
|
; Types
|
||||||
|
|
||||||
; Javascript
|
; Javascript
|
||||||
|
|
||||||
|
; Properties
|
||||||
|
;-----------
|
||||||
|
|
||||||
|
(property_identifier) @property
|
||||||
|
|
||||||
; Special identifiers
|
; Special identifiers
|
||||||
;--------------------
|
;--------------------
|
||||||
|
|
||||||
|
(identifier) @variable
|
||||||
|
|
||||||
((identifier) @constant
|
((identifier) @constant
|
||||||
(#match? @constant "^[A-Z_][A-Z\\d_]+$"))
|
(#match? @constant "^[A-Z_][A-Z\\d_]+$"))
|
||||||
|
|
||||||
|
|
@ -14,11 +22,17 @@
|
||||||
(#match? @constructor "^[A-Z]"))
|
(#match? @constructor "^[A-Z]"))
|
||||||
|
|
||||||
((identifier) @variable.builtin
|
((identifier) @variable.builtin
|
||||||
|
(#not-is? @variable.builtin import var parameter)
|
||||||
(#match? @variable.builtin "^(arguments|module|console|window|document)$"))
|
(#match? @variable.builtin "^(arguments|module|console|window|document)$"))
|
||||||
|
|
||||||
((identifier) @function.builtin
|
((identifier) @function.builtin
|
||||||
|
(#not-is? @function.builtin import var parameter)
|
||||||
(#eq? @function.builtin "require"))
|
(#eq? @function.builtin "require"))
|
||||||
|
|
||||||
|
((identifier) @parameter.reference
|
||||||
|
(#is? @parameter.reference parameter))
|
||||||
|
|
||||||
|
|
||||||
; Function and method definitions
|
; Function and method definitions
|
||||||
;--------------------------------
|
;--------------------------------
|
||||||
|
|
||||||
|
|
@ -78,13 +92,6 @@
|
||||||
(rest_parameter
|
(rest_parameter
|
||||||
(identifier) @parameter))
|
(identifier) @parameter))
|
||||||
|
|
||||||
(identifier) @variable
|
|
||||||
|
|
||||||
; Properties
|
|
||||||
;-----------
|
|
||||||
|
|
||||||
(property_identifier) @property
|
|
||||||
|
|
||||||
; Literals
|
; Literals
|
||||||
;---------
|
;---------
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,28 +14,28 @@
|
||||||
;------------
|
;------------
|
||||||
|
|
||||||
(formal_parameters
|
(formal_parameters
|
||||||
(identifier) @definition.var)
|
(identifier) @definition.parameter)
|
||||||
|
|
||||||
(formal_parameters
|
(formal_parameters
|
||||||
(object_pattern
|
(object_pattern
|
||||||
(identifier) @definition.var))
|
(identifier) @definition.parameter))
|
||||||
|
|
||||||
; function(arg = []) {
|
; function(arg = []) {
|
||||||
(formal_parameters
|
(formal_parameters
|
||||||
(assignment_pattern
|
(assignment_pattern
|
||||||
(shorthand_property_identifier) @definition.var))
|
(shorthand_property_identifier) @definition.parameter))
|
||||||
|
|
||||||
(formal_parameters
|
(formal_parameters
|
||||||
(object_pattern
|
(object_pattern
|
||||||
(shorthand_property_identifier) @definition.var))
|
(shorthand_property_identifier) @definition.parameter))
|
||||||
|
|
||||||
(formal_parameters
|
(formal_parameters
|
||||||
(array_pattern
|
(array_pattern
|
||||||
(identifier) @definition.var))
|
(identifier) @definition.parameter))
|
||||||
|
|
||||||
(formal_parameters
|
(formal_parameters
|
||||||
(rest_parameter
|
(rest_parameter
|
||||||
(identifier) @definition.var))
|
(identifier) @definition.parameter))
|
||||||
|
|
||||||
(variable_declarator
|
(variable_declarator
|
||||||
name: (identifier) @definition.var)
|
name: (identifier) @definition.var)
|
||||||
|
|
|
||||||
|
|
@ -93,5 +93,8 @@
|
||||||
(number) @number
|
(number) @number
|
||||||
(label_statement) @label
|
(label_statement) @label
|
||||||
|
|
||||||
|
((identifier) @parameter.reference
|
||||||
|
(#is? @parameter.reference parameter))
|
||||||
|
|
||||||
;; Error
|
;; Error
|
||||||
(ERROR) @error
|
(ERROR) @error
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@
|
||||||
(field_expression object:(*) @definition.associated (property_identifier) @definition.var)))
|
(field_expression object:(*) @definition.associated (property_identifier) @definition.var)))
|
||||||
|
|
||||||
;; Parameters
|
;; Parameters
|
||||||
(parameters (identifier) @definition.var)
|
(parameters (identifier) @definition.parameter)
|
||||||
|
|
||||||
;; Loops
|
;; Loops
|
||||||
((loop_expression
|
((loop_expression
|
||||||
|
|
|
||||||
|
|
@ -80,6 +80,8 @@
|
||||||
; Normal parameters
|
; Normal parameters
|
||||||
(parameters
|
(parameters
|
||||||
(identifier) @parameter)
|
(identifier) @parameter)
|
||||||
|
((identifier) @parameter.reference
|
||||||
|
(#is? @parameter.reference parameter))
|
||||||
; Lambda parameters
|
; Lambda parameters
|
||||||
(lambda_parameters
|
(lambda_parameters
|
||||||
(identifier) @parameter)
|
(identifier) @parameter)
|
||||||
|
|
|
||||||
|
|
@ -18,16 +18,16 @@
|
||||||
|
|
||||||
; Function with parameters, defines parameters
|
; Function with parameters, defines parameters
|
||||||
(parameters
|
(parameters
|
||||||
(identifier) @definition.var)
|
(identifier) @definition.parameter)
|
||||||
|
|
||||||
(default_parameter
|
(default_parameter
|
||||||
(identifier) @definition.var)
|
(identifier) @definition.parameter)
|
||||||
|
|
||||||
(typed_parameter
|
(typed_parameter
|
||||||
(identifier) @definition.var)
|
(identifier) @definition.parameter)
|
||||||
|
|
||||||
(typed_default_parameter
|
(typed_default_parameter
|
||||||
(identifier) @definition.var)
|
(identifier) @definition.parameter)
|
||||||
|
|
||||||
(with_statement
|
(with_statement
|
||||||
(with_item
|
(with_item
|
||||||
|
|
@ -36,12 +36,12 @@
|
||||||
; *args parameter
|
; *args parameter
|
||||||
(parameters
|
(parameters
|
||||||
(list_splat
|
(list_splat
|
||||||
(identifier) @definition.var))
|
(identifier) @definition.parameter))
|
||||||
|
|
||||||
; **kwargs parameter
|
; **kwargs parameter
|
||||||
(parameters
|
(parameters
|
||||||
(dictionary_splat
|
(dictionary_splat
|
||||||
(identifier) @definition.var))
|
(identifier) @definition.parameter))
|
||||||
|
|
||||||
; Function defines function and scope
|
; Function defines function and scope
|
||||||
(function_definition
|
(function_definition
|
||||||
|
|
@ -52,10 +52,10 @@
|
||||||
(class_definition
|
(class_definition
|
||||||
name: (identifier) @definition.type) @scope
|
name: (identifier) @definition.type) @scope
|
||||||
|
|
||||||
(class_definition
|
(class_definition
|
||||||
body: (block
|
body: (block
|
||||||
(function_definition
|
(function_definition
|
||||||
name: (identifier) @definition.method)))
|
name: (identifier) @definition.method)))
|
||||||
|
|
||||||
;;; Loops
|
;;; Loops
|
||||||
; not a scope!
|
; not a scope!
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue