highlight_definitions not correctly matching scope
RRethy opened this issue · 1 comments
Describe the bug
highlight_definitions
isn't finding the definition of functions because they are being scoped incorrectly.
To Reproduce
init.lua:
require('nvim-treesitter.configs').setup {
refactor = {
highlight_definitions = {
enable = true,
},
}
}
- Open the following lua file:
function Foo()
end
Foo()
Foo()
- Put your cursor on the
Foo()
function calls. Foo()
function declaration will not be highlighted
Expected behavior
I expect the Foo()
function call to be highlighted
Output of :checkhealth nvim_treesitter
nvim-treesitter: require("nvim-treesitter.health").check()
========================================================================
## Installation
- OK: `tree-sitter` found 0.20.0 (53f094f05e9151362bf463b95b80fc4adb05b74a) (parser generator, only needed for :TSInstallFromGrammar)
- OK: `node` found v18.6.0 (only needed for :TSInstallFromGrammar)
- OK: `git` executable found.
- OK: `cc` executable found. Selected from { vim.NIL, "cc", "gcc", "clang", "cl", "zig" }
Version: Apple clang version 13.1.6 (clang-1316.0.21.2.5)
- 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
- regex ✓ . . . .
- hack ✓ . . . .
- rust ✓ ✓ ✓ ✓ ✓
- ruby ✓ ✓ ✓ ✓ ✓
- sparql ✓ ✓ ✓ ✓ ✓
- rego ✓ . . . ✓
- sql x . . . ✓
- gdscript ✓ ✓ . ✓ ✓
- embedded_template✓ . . . ✓
- surface ✓ . ✓ ✓ ✓
- clojure ✓ ✓ ✓ . ✓
- eex ✓ . . . ✓
- cuda ✓ ✓ ✓ ✓ ✓
- solidity ✓ . . . .
- ocaml ✓ ✓ ✓ . ✓
- query ✓ ✓ ✓ ✓ ✓
- devicetree ✓ ✓ ✓ ✓ ✓
- ocaml_interface✓ ✓ ✓ . ✓
- glsl ✓ ✓ ✓ ✓ ✓
- svelte ✓ . ✓ ✓ ✓
- ocamllex ✓ . . . ✓
- tiger ✓ ✓ ✓ ✓ ✓
- org . . . . .
- dot ✓ . . . ✓
- swift ✓ ✓ . . .
- v ✓ ✓ ✓ ✓ ✓
- rnoweb ✓ . ✓ . ✓
- fusion ✓ ✓ ✓ ✓ .
- proto ✓ . ✓ . .
- todotxt ✓ . . . .
- ledger ✓ . ✓ ✓ ✓
- bibtex ✓ . ✓ ✓ .
- typescript ✓ ✓ ✓ ✓ ✓
- m68k ✓ ✓ ✓ . ✓
- json ✓ ✓ ✓ ✓ .
- scala ✓ . ✓ . ✓
- wgsl ✓ . ✓ . .
- css ✓ . ✓ ✓ ✓
- supercollider ✓ ✓ ✓ ✓ ✓
- gomod ✓ . . . ✓
- gowork ✓ . . . ✓
- slint ✓ . . ✓ .
- cooklang ✓ . . . .
- lalrpop ✓ ✓ . . .
- graphql ✓ . . ✓ ✓
- vala ✓ . ✓ . .
- norg . . . . .
- foam ✓ ✓ ✓ ✓ ✓
- d ✓ . ✓ ✓ ✓
- perl ✓ . ✓ . .
- lua ✓ ✓ ✓ ✓ ✓
- gleam ✓ ✓ ✓ ✓ ✓
- prisma ✓ . . . .
- markdown_inline✓ . . . ✓
- fish ✓ ✓ ✓ ✓ ✓
- http ✓ . . . ✓
- tlaplus ✓ ✓ ✓ . ✓
- php ✓ ✓ ✓ ✓ ✓
- scheme ✓ . ✓ . ✓
- fennel ✓ ✓ . . ✓
- toml ✓ ✓ ✓ ✓ ✓
- hjson ✓ ✓ ✓ ✓ ✓
- kotlin ✓ ✓ ✓ . ✓
- dockerfile ✓ . . . ✓
- heex ✓ ✓ ✓ ✓ ✓
- help ✓ . . . .
- pug ✓ . . . ✓
- vim ✓ ✓ ✓ . ✓
- cmake ✓ . ✓ . .
- fortran ✓ . ✓ ✓ .
- c ✓ ✓ ✓ ✓ ✓
- go ✓ ✓ ✓ ✓ ✓
- scss ✓ . . ✓ .
- zig ✓ . ✓ ✓ ✓
- latex ✓ . ✓ . ✓
- erlang ✓ . ✓ . .
- beancount ✓ . ✓ . .
- r ✓ ✓ . ✓ ✓
- elixir ✓ ✓ ✓ ✓ ✓
- vue ✓ . ✓ ✓ ✓
- javascript ✓ ✓ ✓ ✓ ✓
- turtle ✓ ✓ ✓ ✓ ✓
- jsonc ✓ ✓ ✓ ✓ ✓
- godot_resource ✓ ✓ ✓ . .
- bash ✓ ✓ ✓ . ✓
- elm ✓ . . . ✓
- html ✓ ✓ ✓ ✓ ✓
- yaml ✓ ✓ ✓ ✓ ✓
- tsx ✓ ✓ ✓ ✓ ✓
- yang ✓ . ✓ ✓ .
- hcl ✓ . ✓ ✓ ✓
- jsdoc ✓ . . . .
- glimmer ✓ . . . .
- julia ✓ ✓ ✓ ✓ ✓
- verilog ✓ ✓ ✓ . ✓
- nix ✓ ✓ ✓ . ✓
- json5 ✓ . . . ✓
- java ✓ ✓ . ✓ ✓
- dart ✓ ✓ . ✓ ✓
- pioasm ✓ . . . ✓
- markdown ✓ . ✓ . ✓
- rst ✓ ✓ . . ✓
- ninja ✓ . ✓ ✓ .
- c_sharp ✓ ✓ ✓ . ✓
- hocon ✓ . . . ✓
- teal ✓ ✓ ✓ ✓ ✓
- cpp ✓ ✓ ✓ ✓ ✓
- llvm ✓ . . . .
- ql ✓ ✓ . ✓ ✓
- qmljs ✓ . ✓ . .
- haskell ✓ . ✓ . ✓
- python ✓ ✓ ✓ ✓ ✓
- commonlisp ✓ ✓ ✓ . .
- pascal ✓ ✓ ✓ ✓ ✓
- elvish ✓ . . . ✓
- make ✓ . . . ✓
- phpdoc ✓ . . . .
- astro ✓ ✓ ✓ ✓ ✓
- rasi ✓ ✓ ✓ ✓ .
- comment ✓ . . . .
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}
## The following errors have been detected:
- ERROR: sql(highlights): /usr/local/share/nvim/runtime/lua/vim/treesitter/query.lua:174: query: invalid node type at position 86
sql(highlights) is concatenated from the following files:
| [ERROR]:"/Users/adam.regaszrethy/.local/share/nvim/site/pack/backpack/opt/nvim-treesitter/queries/sql/highlights.scm", failed to load: /usr/local/share/nvim/runtime/lua/vim/treesitter/query.lua:174: query: invalid node type at position 86
Output of nvim --version
NVIM v0.8.0-dev-nightly-86-gd15a66d80
Build type: Release
LuaJIT 2.1.0-beta3
Compiled by adam.regaszrethy@Adams-MacBook-Pro.local
Features: +acl +iconv +tui
See ":help feature-compile"
system vimrc file: "$VIM/sysinit.vim"
fall-back for $VIM: "/usr/local/share/nvim"
Run :checkhealth for more info
Additional context
I took a look through the code and the cause is that find_definition has an incorrect def_lookup
. The function is being given the id
of k_Foo_0_0_2_3
when it should have an id of k_Foo_0_0_6_0
which would let it have the same id as the function calls to Foo()
. This id table gets setup here. If we were to debug this line, we would see node_entry.scope
is nil
which I believe is the issue since it should probably be parent
. Looks like a bug in recurse_local_nodes but I'm not sure what's supposed to be going on in that thing.
Closing in favour of nvim-treesitter/nvim-treesitter#3280 because this bug is in the source code of that plugin.