Closed dlight closed 2 years ago
So I'm trying to debug queries for the Elixir language and in locals.scm there's a query with this fragment:
(identifier) @_identifier (#any-of? @_identifier "def" "defp" "defmacro" "defmacrop" "defguard" "defguardp" "defn" "defnp" "for")
And when matching with this code:
def foo2(a, b) do :ok end
It matches def, foo2, a and b (all identifiers), but it should match only def!
def
foo2
a
b
Why is #any-of? ignored? I guess that predicates aren't handled by treesitter itself but I supposed that nvim-treesitter would filter out the results that don't match.
#any-of?
Here's it running:
And here's the result of :checkhealth nvim-treesitter:
:checkhealth nvim-treesitter
nvim-treesitter: require("nvim-treesitter.health").check() ======================================================================== ## Installation - OK: `tree-sitter` found 0.20.7 (parser generator, only needed for :TSInstallFromGrammar) - OK: `node` found v16.16.0 (only needed for :TSInstallFromGrammar) - OK: `git` executable found. - OK: `cc` executable found. Selected from { vim.NIL, "cc", "gcc", "clang", "cl", "zig" } Version: cc (GCC) 12.2.0 - OK: Neovim was compiled with tree-sitter runtime ABI version 14 (required >=13). Parsers must be compatible with runtime ABI. ## Parser/Features H L F I J - vim ✓ ✓ ✓ . ✓ - elixir ✓ ✓ ✓ ✓ ✓ - erlang ✓ . ✓ . . - javascript ✓ ✓ ✓ ✓ ✓ - lua ✓ ✓ ✓ ✓ ✓ - cpp ✓ ✓ ✓ ✓ ✓ - c ✓ ✓ ✓ ✓ ✓ - typescript ✓ ✓ ✓ ✓ ✓ - css ✓ . ✓ ✓ ✓ - query ✓ ✓ ✓ ✓ ✓ - html ✓ ✓ ✓ ✓ ✓ - python ✓ ✓ ✓ ✓ ✓ - bash ✓ ✓ ✓ . ✓ - json ✓ ✓ ✓ ✓ . Legend: H[ighlight], L[ocals], F[olds], I[ndents], In[j]ections +) multiple parsers found, only one will be used x) errors found in the query, try to run :TSUpdate {lang}
And I'm running nvim-treesitter from git
Oh. I just need to wrap the query in (), like this
((identifier) @_identifier (#any-of? @_identifier "def" "defp" "defmacro" "defmacrop" "defguard" "defguardp" "defn" "defnp" "for"))
It's working now
So I'm trying to debug queries for the Elixir language and in locals.scm there's a query with this fragment:
And when matching with this code:
It matches
def
,foo2
,a
andb
(all identifiers), but it should match onlydef
!Why is
#any-of?
ignored? I guess that predicates aren't handled by treesitter itself but I supposed that nvim-treesitter would filter out the results that don't match.Here's it running:
And here's the result of
:checkhealth nvim-treesitter
:And I'm running nvim-treesitter from git