nvim-treesitter/playground

Query doesn't respect #any-of?

dlight opened this issue · 1 comments

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!

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:

image

And here's the result of :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