Merge pull request #23606 from clason/bump-tree-sitter-lua

fix(treesitter): update parser and queries
This commit is contained in:
Christian Clason
2023-05-15 19:46:47 +02:00
committed by GitHub
9 changed files with 88 additions and 14 deletions

View File

@@ -52,8 +52,8 @@ LIBICONV_SHA256 ccf536620a45458d26ba83887a983b96827001e92a13847b45e4925cc8913178
TREESITTER_C_URL https://github.com/tree-sitter/tree-sitter-c/archive/v0.20.2.tar.gz TREESITTER_C_URL https://github.com/tree-sitter/tree-sitter-c/archive/v0.20.2.tar.gz
TREESITTER_C_SHA256 af66fde03feb0df4faf03750102a0d265b007e5d957057b6b293c13116a70af2 TREESITTER_C_SHA256 af66fde03feb0df4faf03750102a0d265b007e5d957057b6b293c13116a70af2
TREESITTER_LUA_URL https://github.com/MunifTanjim/tree-sitter-lua/archive/v0.0.14.tar.gz TREESITTER_LUA_URL https://github.com/MunifTanjim/tree-sitter-lua/archive/v0.0.17.tar.gz
TREESITTER_LUA_SHA256 930d0370dc15b66389869355c8e14305b9ba7aafd36edbfdb468c8023395016d TREESITTER_LUA_SHA256 8963fd0a185d786c164dfca3824941c7eaec497ce49a3a0bc24bf753f5e0e59c
TREESITTER_VIM_URL https://github.com/neovim/tree-sitter-vim/archive/v0.3.0.tar.gz TREESITTER_VIM_URL https://github.com/neovim/tree-sitter-vim/archive/v0.3.0.tar.gz
TREESITTER_VIM_SHA256 403acec3efb7cdb18ff3d68640fc823502a4ffcdfbb71cec3f98aa786c21cbe2 TREESITTER_VIM_SHA256 403acec3efb7cdb18ff3d68640fc823502a4ffcdfbb71cec3f98aa786c21cbe2
TREESITTER_VIMDOC_URL https://github.com/neovim/tree-sitter-vimdoc/archive/v2.0.0.tar.gz TREESITTER_VIMDOC_URL https://github.com/neovim/tree-sitter-vimdoc/archive/v2.0.0.tar.gz

View File

@@ -221,8 +221,7 @@ The following predicates are built in:
similar to `match?` similar to `match?`
`contains?` *treesitter-predicate-contains?* `contains?` *treesitter-predicate-contains?*
Match a string against parts of the text corresponding to a node: Match a string against parts of the text corresponding to a node: >query
>query
((identifier) @foo (#contains? @foo "foo")) ((identifier) @foo (#contains? @foo "foo"))
((identifier) @foo-bar (#contains? @foo-bar "foo" "bar")) ((identifier) @foo-bar (#contains? @foo-bar "foo" "bar"))
< <
@@ -234,6 +233,19 @@ The following predicates are built in:
This is the recommended way to check if the node matches one of many This is the recommended way to check if the node matches one of many
keywords, as it has been optimized for this. keywords, as it has been optimized for this.
`has-ancestor?` *treesitter-predicate-has-ancestor?*
Match any of the given node types against all ancestors of a node: >query
((identifier) @variable.builtin
(#any-of? @variable.builtin "begin" "end")
(#has-ancestor? @variable.builtin range_expression))
<
`has-parent?` *treesitter-predicate-has-parent?*
Match any of the given node types against the direct ancestor of a
node: >query
(((field_expression
(field_identifier) @method)) @_parent
(#has-parent? @_parent template_method function_declarator))
<
*lua-treesitter-not-predicate* *lua-treesitter-not-predicate*
Each predicate has a `not-` prefixed predicate that is just the negation of Each predicate has a `not-` prefixed predicate that is just the negation of
the predicate. the predicate.

View File

@@ -382,6 +382,39 @@ local predicate_handlers = {
return string_set[node_text] return string_set[node_text]
end, end,
['has-ancestor?'] = function(match, _, _, predicate)
local node = match[predicate[2]]
if not node then
return true
end
local ancestor_types = {}
for _, type in ipairs({ unpack(predicate, 3) }) do
ancestor_types[type] = true
end
node = node:parent()
while node do
if ancestor_types[node:type()] then
return true
end
node = node:parent()
end
return false
end,
['has-parent?'] = function(match, _, _, predicate)
local node = match[predicate[2]]
if not node then
return true
end
if vim.list_contains({ unpack(predicate, 3) }, node:parent():type()) then
return true
end
return false
end,
} }
-- As we provide lua-match? also expose vim-match? -- As we provide lua-match? also expose vim-match?

View File

@@ -117,12 +117,19 @@
(preproc_defined) (preproc_defined)
] @function.macro ] @function.macro
(field_identifier) @property (((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 (statement_identifier) @label
[ [
(type_identifier) (type_identifier)
(sized_type_specifier)
(type_descriptor) (type_descriptor)
] @type ] @type
@@ -138,6 +145,8 @@
(primitive_type) @type.builtin (primitive_type) @type.builtin
(sized_type_specifier _ @type.builtin type: _?)
((identifier) @constant ((identifier) @constant
(#lua-match? @constant "^[A-Z][A-Z0-9_]+$")) (#lua-match? @constant "^[A-Z][A-Z0-9_]+$"))
(enumerator (enumerator
@@ -163,6 +172,10 @@
field: (field_identifier) @function.call)) field: (field_identifier) @function.call))
(function_declarator (function_declarator
declarator: (identifier) @function) declarator: (identifier) @function)
(function_declarator
declarator: (parenthesized_declarator
(pointer_declarator
declarator: (field_identifier) @function)))
(preproc_function_def (preproc_function_def
name: (identifier) @function.macro) name: (identifier) @function.macro)

View File

@@ -127,8 +127,14 @@
(identifier) @variable (identifier) @variable
((identifier) @constant.builtin
(#eq? @constant.builtin "_VERSION"))
((identifier) @variable.builtin ((identifier) @variable.builtin
(#any-of? @variable.builtin "_G" "_VERSION" "debug" "io" "jit" "math" "os" "package" "self" "string" "table" "utf8")) (#eq? @variable.builtin "self"))
((identifier) @namespace.builtin
(#any-of? @namespace.builtin "_G" "debug" "io" "jit" "math" "os" "package" "string" "table" "utf8"))
((identifier) @keyword.coroutine ((identifier) @keyword.coroutine
(#eq? @keyword.coroutine "coroutine")) (#eq? @keyword.coroutine "coroutine"))
@@ -210,5 +216,7 @@
(string) @string @spell (string) @string @spell
(escape_sequence) @string.escape
;; Error ;; Error
(ERROR) @error (ERROR) @error

View File

@@ -13,6 +13,14 @@
(#set! injection.language "vim") (#set! injection.language "vim")
(#any-of? @_vimcmd_identifier "vim.cmd" "vim.api.nvim_command" "vim.api.nvim_exec2" "vim.api.nvim_cmd")) (#any-of? @_vimcmd_identifier "vim.cmd" "vim.api.nvim_command" "vim.api.nvim_exec2" "vim.api.nvim_cmd"))
; vim.rcprequest(123, "nvim_exec_lua", "return vim.api.nvim_buf_get_lines(0, 0, -1, false)", false)
((function_call
name: (_) @_vimcmd_identifier
arguments: (arguments . (_) . (string content: _ @_method) . (string content: _ @injection.content)))
(#set! injection.language "lua")
(#any-of? @_vimcmd_identifier "vim.rpcrequest" "vim.rpcnotify")
(#eq? @_method "nvim_exec_lua"))
((function_call ((function_call
name: (_) @_vimcmd_identifier name: (_) @_vimcmd_identifier
arguments: (arguments (string content: _ @injection.content) .)) arguments: (arguments (string content: _ @injection.content) .))
@@ -20,7 +28,7 @@
(#any-of? @_vimcmd_identifier "vim.treesitter.query.set" "vim.treesitter.query.parse")) (#any-of? @_vimcmd_identifier "vim.treesitter.query.set" "vim.treesitter.query.parse"))
;; highlight string as query if starts with `;; query` ;; highlight string as query if starts with `;; query`
((string ("string_content") @injection.content) (string content: _ @injection.content
(#set! injection.language "query") (#set! injection.language "query")
(#lua-match? @injection.content "^%s*;+%s?query")) (#lua-match? @injection.content "^%s*;+%s?query"))

View File

@@ -275,7 +275,7 @@
; Options ; Options
((set_value) @number ((set_value) @number
(#match? @number "^[0-9]+(\.[0-9]+)?$")) (#lua-match? @number "^[%d]+(%.[%d]+)?$"))
(inv_option "!" @operator) (inv_option "!" @operator)
(set_item "?" @operator) (set_item "?" @operator)

View File

@@ -1,7 +1,7 @@
(h1) @text.title (h1) @text.title.1
(h2) @text.title (h2) @text.title.2
(h3) @text.title (h3) @text.title.3
(column_heading) @text.title (column_heading) @text.title.4
(column_heading (column_heading
"~" @conceal (#set! conceal "")) "~" @conceal (#set! conceal ""))
(tag (tag

View File

@@ -483,7 +483,7 @@ end]]
return list return list
]] ]]
eq({ 'any-of?', 'contains?', 'eq?', 'is-main?', 'lua-match?', 'match?', 'vim-match?' }, res_list) eq({ 'any-of?', 'contains?', 'eq?', 'has-ancestor?', 'has-parent?', 'is-main?', 'lua-match?', 'match?', 'vim-match?' }, res_list)
end) end)