mirror of
https://github.com/nvim-treesitter/nvim-treesitter.git
synced 2026-07-01 19:17: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
|
||||
macro
|
||||
@parameter
|
||||
reference references to parameters
|
||||
|
||||
@method
|
||||
@field or @property
|
||||
|
|
|
|||
|
|
@ -358,6 +358,10 @@ Rust.
|
|||
*hl-TSParameter*
|
||||
For parameters of a function.
|
||||
|
||||
`TSParameterReference`
|
||||
*hl-TSParameterReference*
|
||||
For references to parameters of a function.
|
||||
|
||||
`TSMethod`
|
||||
*hl-TSMethod*
|
||||
For method calls and definitions.
|
||||
|
|
|
|||
|
|
@ -5,6 +5,9 @@ local info = require'nvim-treesitter.info'
|
|||
local configs = require'nvim-treesitter.configs'
|
||||
local parsers = require'nvim-treesitter.parsers'
|
||||
|
||||
-- Registers all query predicates
|
||||
require"nvim-treesitter.query_predicates"
|
||||
|
||||
local M = {}
|
||||
|
||||
function M.setup()
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ hlmap["function"] = "TSFunction"
|
|||
hlmap["function.builtin"] = "TSFuncBuiltin"
|
||||
hlmap["function.macro"] = "TSFuncMacro"
|
||||
hlmap["parameter"] = "TSParameter"
|
||||
hlmap["parameter.reference"] = "TSParameterReference"
|
||||
hlmap["method"] = "TSMethod"
|
||||
hlmap["field"] = "TSField"
|
||||
hlmap["property"] = "TSProperty"
|
||||
|
|
|
|||
|
|
@ -4,12 +4,25 @@ local function error(str)
|
|||
vim.api.nvim_err_writeln(str)
|
||||
end
|
||||
|
||||
query.add_predicate("nth?", function(match, pattern, bufnr, pred)
|
||||
if #pred ~= 3 then
|
||||
error("nth? must hav exactly two arguments")
|
||||
return
|
||||
local function valid_args(name, pred, count, strict_count)
|
||||
local arg_count = #pred - 1
|
||||
|
||||
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
|
||||
|
||||
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 n = pred[3] - 1
|
||||
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)
|
||||
|
||||
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 ancestor_type = pred[3]
|
||||
|
|
@ -35,3 +48,18 @@ query.add_predicate('has-ancestor?', function(match, pattern, bufnr, pred)
|
|||
end
|
||||
return false
|
||||
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 TSFuncMacro Macro
|
||||
highlight default link TSParameter Identifier
|
||||
highlight default link TSParameterReference TSParameter
|
||||
highlight default link TSMethod Function
|
||||
highlight default link TSField Identifier
|
||||
highlight default link TSProperty Identifier
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
[
|
||||
[
|
||||
"const"
|
||||
"default"
|
||||
"enum"
|
||||
|
|
@ -131,8 +131,10 @@
|
|||
(comment) @comment
|
||||
|
||||
;; Parameters
|
||||
(parameter_list
|
||||
(parameter_declaration) @parameter)
|
||||
(parameter_declaration
|
||||
declarator: (identifier) @parameter)
|
||||
((identifier) @parameter.reference
|
||||
(#is? @parameter.reference parameter))
|
||||
|
||||
(preproc_params
|
||||
(identifier)) @parameter
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@
|
|||
(pointer_declarator
|
||||
declarator: (identifier) @definition.var)
|
||||
(parameter_declaration
|
||||
declarator: (identifier) @definition.var)
|
||||
declarator: (identifier) @definition.parameter)
|
||||
(init_declarator
|
||||
declarator: (identifier) @definition.var)
|
||||
(array_declarator
|
||||
|
|
|
|||
|
|
@ -8,7 +8,12 @@
|
|||
(#match? @field "_$"))
|
||||
|
||||
; 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?
|
||||
(template_function
|
||||
|
|
@ -42,20 +47,20 @@
|
|||
(#match? @constructor "^[A-Z]"))
|
||||
|
||||
(call_expression
|
||||
function: (scoped_identifier
|
||||
function: (scoped_identifier
|
||||
name: (identifier) @function))
|
||||
|
||||
(call_expression
|
||||
function: (field_expression
|
||||
function: (field_expression
|
||||
field: (field_identifier) @function))
|
||||
|
||||
((call_expression
|
||||
function: (scoped_identifier
|
||||
function: (scoped_identifier
|
||||
name: (identifier) @constructor))
|
||||
(#match? @constructor "^[A-Z]"))
|
||||
|
||||
((call_expression
|
||||
function: (field_expression
|
||||
function: (field_expression
|
||||
field: (field_identifier) @constructor))
|
||||
(#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_specifier) @scope
|
||||
|
|
@ -10,14 +16,14 @@
|
|||
(identifier) @definition.var)
|
||||
|
||||
(struct_specifier
|
||||
name: (type_identifier) @definition.type)
|
||||
name: (type_identifier) @definition.type)
|
||||
|
||||
(struct_specifier
|
||||
name: (scoped_type_identifier
|
||||
name: (type_identifier) @definition.type))
|
||||
|
||||
(class_specifier
|
||||
name: (type_identifier) @definition.type)
|
||||
name: (type_identifier) @definition.type)
|
||||
|
||||
(class_specifier
|
||||
name: (scoped_type_identifier
|
||||
|
|
@ -32,7 +38,7 @@
|
|||
(template_declaration) @scope
|
||||
|
||||
;; Namespaces
|
||||
(namespace_definition
|
||||
(namespace_definition
|
||||
name: (identifier) @definition.namespace
|
||||
body: (_) @scope)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,17 @@
|
|||
; Types
|
||||
|
||||
; Javascript
|
||||
|
||||
; Properties
|
||||
;-----------
|
||||
|
||||
(property_identifier) @property
|
||||
|
||||
; Special identifiers
|
||||
;--------------------
|
||||
|
||||
(identifier) @variable
|
||||
|
||||
((identifier) @constant
|
||||
(#match? @constant "^[A-Z_][A-Z\\d_]+$"))
|
||||
|
||||
|
|
@ -14,11 +22,17 @@
|
|||
(#match? @constructor "^[A-Z]"))
|
||||
|
||||
((identifier) @variable.builtin
|
||||
(#not-is? @variable.builtin import var parameter)
|
||||
(#match? @variable.builtin "^(arguments|module|console|window|document)$"))
|
||||
|
||||
((identifier) @function.builtin
|
||||
(#not-is? @function.builtin import var parameter)
|
||||
(#eq? @function.builtin "require"))
|
||||
|
||||
((identifier) @parameter.reference
|
||||
(#is? @parameter.reference parameter))
|
||||
|
||||
|
||||
; Function and method definitions
|
||||
;--------------------------------
|
||||
|
||||
|
|
@ -78,13 +92,6 @@
|
|||
(rest_parameter
|
||||
(identifier) @parameter))
|
||||
|
||||
(identifier) @variable
|
||||
|
||||
; Properties
|
||||
;-----------
|
||||
|
||||
(property_identifier) @property
|
||||
|
||||
; Literals
|
||||
;---------
|
||||
|
||||
|
|
|
|||
|
|
@ -14,28 +14,28 @@
|
|||
;------------
|
||||
|
||||
(formal_parameters
|
||||
(identifier) @definition.var)
|
||||
(identifier) @definition.parameter)
|
||||
|
||||
(formal_parameters
|
||||
(object_pattern
|
||||
(identifier) @definition.var))
|
||||
(identifier) @definition.parameter))
|
||||
|
||||
; function(arg = []) {
|
||||
(formal_parameters
|
||||
(assignment_pattern
|
||||
(shorthand_property_identifier) @definition.var))
|
||||
(shorthand_property_identifier) @definition.parameter))
|
||||
|
||||
(formal_parameters
|
||||
(object_pattern
|
||||
(shorthand_property_identifier) @definition.var))
|
||||
(shorthand_property_identifier) @definition.parameter))
|
||||
|
||||
(formal_parameters
|
||||
(array_pattern
|
||||
(identifier) @definition.var))
|
||||
(identifier) @definition.parameter))
|
||||
|
||||
(formal_parameters
|
||||
(rest_parameter
|
||||
(identifier) @definition.var))
|
||||
(identifier) @definition.parameter))
|
||||
|
||||
(variable_declarator
|
||||
name: (identifier) @definition.var)
|
||||
|
|
|
|||
|
|
@ -93,5 +93,8 @@
|
|||
(number) @number
|
||||
(label_statement) @label
|
||||
|
||||
((identifier) @parameter.reference
|
||||
(#is? @parameter.reference parameter))
|
||||
|
||||
;; Error
|
||||
(ERROR) @error
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
(field_expression object:(*) @definition.associated (property_identifier) @definition.var)))
|
||||
|
||||
;; Parameters
|
||||
(parameters (identifier) @definition.var)
|
||||
(parameters (identifier) @definition.parameter)
|
||||
|
||||
;; Loops
|
||||
((loop_expression
|
||||
|
|
|
|||
|
|
@ -80,6 +80,8 @@
|
|||
; Normal parameters
|
||||
(parameters
|
||||
(identifier) @parameter)
|
||||
((identifier) @parameter.reference
|
||||
(#is? @parameter.reference parameter))
|
||||
; Lambda parameters
|
||||
(lambda_parameters
|
||||
(identifier) @parameter)
|
||||
|
|
|
|||
|
|
@ -18,16 +18,16 @@
|
|||
|
||||
; Function with parameters, defines parameters
|
||||
(parameters
|
||||
(identifier) @definition.var)
|
||||
(identifier) @definition.parameter)
|
||||
|
||||
(default_parameter
|
||||
(identifier) @definition.var)
|
||||
(identifier) @definition.parameter)
|
||||
|
||||
(typed_parameter
|
||||
(identifier) @definition.var)
|
||||
(identifier) @definition.parameter)
|
||||
|
||||
(typed_default_parameter
|
||||
(identifier) @definition.var)
|
||||
(identifier) @definition.parameter)
|
||||
|
||||
(with_statement
|
||||
(with_item
|
||||
|
|
@ -36,12 +36,12 @@
|
|||
; *args parameter
|
||||
(parameters
|
||||
(list_splat
|
||||
(identifier) @definition.var))
|
||||
(identifier) @definition.parameter))
|
||||
|
||||
; **kwargs parameter
|
||||
(parameters
|
||||
(dictionary_splat
|
||||
(identifier) @definition.var))
|
||||
(identifier) @definition.parameter))
|
||||
|
||||
; Function defines function and scope
|
||||
(function_definition
|
||||
|
|
@ -52,10 +52,10 @@
|
|||
(class_definition
|
||||
name: (identifier) @definition.type) @scope
|
||||
|
||||
(class_definition
|
||||
(class_definition
|
||||
body: (block
|
||||
(function_definition
|
||||
name: (identifier) @definition.method)))
|
||||
name: (identifier) @definition.method)))
|
||||
|
||||
;;; Loops
|
||||
; not a scope!
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue