nvim-treesitter-refactor icon indicating copy to clipboard operation
nvim-treesitter-refactor copied to clipboard

Highlight definitions leads to "Error detected while processing CursorHold"

Open madskjeldgaard opened this issue 3 years ago • 4 comments

Describe the bug Hello Highlight definitions for me freaks out Nvim when it encounters and error in the parser tree it seems:

E5108: Error executing lua ...m/plugged/nvim-treesitter/lua/nvim-treesitter/locals.lua:133: bad argument #1 to 'pairs' (table expected, g
ot string)   ```

This is tested with the supercollider grammar.

**Expected behavior**
I expect it to fail silently.

**Output of `:checkhealth nvim_treesitter`**

<details>
<code>

health#nvim_treesitter#check
========================================================================
## Installation
  - OK: `tree-sitter` found  0.19.4 (parser generator, only needed for :TSInstallFromGrammar)
  - OK: `node` found v14.16.0 (only needed for :TSInstallFromGrammar)
  - OK: `git` executable found.
  - OK: `cc` executable found. Selected from { vim.NIL, "cc", "gcc", "clang", "cl" }
  - OK: Neovim was compiled with tree-sitter runtime ABI version 13 (required >=13). Parsers must be compatible with runtime ABI.

## Parser/Features H L F I
  - c_sharp        ✓ . . . 
  - svelte         ✓ . ✓ ✓ 
  - beancount      ✓ . ✓ . 
  - zig            ✓ ✓ ✓ ✓ 
  - c              ✓ ✓ ✓ ✓ 
  - fortran        ✓ . ✓ . 
  - teal           ✓ ✓ ✓ ✓ 
  - java           ✓ ✓ . ✓ 
  - python         ✓ ✓ ✓ ✓ 
  - bibtex         ✓ . ✓ ✓ 
  - sparql         ✓ ✓ ✓ ✓ 
  - comment        ✓ . . . 
  - gomod          ✓ . . . 
  - dart           ✓ ✓ . ✓ 
  - lua            ✓ ✓ ✓ ✓ 
  - latex          ✓ . ✓ . 
  - ocaml          ✓ ✓ ✓ . 
  - bash           ✓ ✓ ✓ . 
  - r              ✓ ✓ . . 
  - scss           ✓ . . ✓ 
  - yaml           ✓ ✓ ✓ ✓ 
  - json           ✓ ✓ ✓ ✓ 
  - jsdoc          ✓ . . . 
  - ledger         ✓ . ✓ ✓ 
  - php            ✓ ✓ ✓ ✓ 
  - julia          ✓ ✓ ✓ . 
  - supercollider  ✓ ✓ ✓ ✓ 
  - devicetree     ✓ ✓ ✓ ✓ 
  - gdscript       ✓ ✓ . . 
  - turtle         ✓ ✓ ✓ ✓ 
  - vue            ✓ . ✓ . 
  - html           ✓ ✓ ✓ ✓ 
  - typescript     ✓ ✓ ✓ ✓ 
  - regex          ✓ . . . 
  - verilog        ✓ ✓ ✓ . 
  - jsonc          ✓ ✓ ✓ ✓ 
  - ql             ✓ ✓ . ✓ 
  - fennel         ✓ ✓ . . 
  - swift          . . . . 
  - rst            ✓ ✓ . . 
  - nix            ✓ ✓ ✓ . 
  - elm            . . . . 
  - query          ✓ ✓ ✓ ✓ 
  - graphql        ✓ . . ✓ 
  - cpp            ✓ ✓ ✓ ✓ 
  - toml           ✓ ✓ ✓ ✓ 
  - kotlin         ✓ . . . 
  - ruby           ✓ ✓ ✓ ✓ 
  - fish           ✓ ✓ ✓ ✓ 
  - ocamllex       ✓ . . . 
  - scala          . . . . 
  - dockerfile     ✓ . . . 
  - rust           ✓ ✓ ✓ ✓ 
  - haskell        . . . . 
  - ocaml_interface✓ ✓ ✓ . 
  - javascript     ✓ ✓ ✓ ✓ 
  - css            ✓ . ✓ ✓ 
  - glimmer        ✓ . . . 
  - erlang         . . . . 
  - clojure        ✓ ✓ . . 
  - go             ✓ ✓ ✓ ✓ 
  - tsx            ✓ ✓ ✓ ✓ 

 Legend: H[ighlight], L[ocals], F[olds], I[ndents]
         +) multiple parsers found, only one will be used
         x) errors found in the query, try to run :TSUpdate {lang}


</code>
</details>

**Output of `nvim --version`**

NVIM v0.5.0-dev+1318-g61aefaf29 Build type: RelWithDebInfo LuaJIT 2.0.5 Compilation: /usr/bin/cc -D_FORTIFY _SOURCE=2 -march=x86-64 -mtune=gene ric -O2 -pipe -fno-plt -U_FORTIFY_S OURCE -D_FORTIFY_SOURCE=1 -O2 -g -O g -g -Wall -Wextra -pedantic -Wno-u nused-parameter -Wstrict-prototypes -std=gnu99 -Wshadow -Wconversion - Wmissing-prototypes -Wimplicit-fall through -Wvla -fstack-protector-str ong -fno-common -fdiagnostics-color =auto -DINCLUDE_GENERATED_DECLARATI ONS -D_GNU_SOURCE -DNVIM_MSGPACK_HA S_FLOAT32 -DNVIM_UNIBI_HAS_VAR_FROM -DMIN_LOG_LEVEL=3 -I/home/mads/.ca che/yay/neovim-git/src/build/config -I/home/mads/.cache/yay/neovim-git /src/neovim-git/src -I/usr/include -I/home/mads/.cache/yay/neovim-git/ src/build/src/nvim/auto -I/home/mad s/.cache/yay/neovim-git/src/build/i nclude Compiled by mads

Features: +acl +iconv +tui See ":help feature-compile"

system vimrc file: "$VIM/sysinit .vim" fall-back for $VIM: "/usr/share/n vim"


**Additional context**
Add any other context about the problem here.

madskjeldgaard avatar May 18 '21 08:05 madskjeldgaard

It seems that when using this, the local_def here is passed the value "local" as a string: https://github.com/nvim-treesitter/nvim-treesitter/blob/506e998da2739024b52f1ca947ae76d3423763e6/lua/nvim-treesitter/locals.lua#L133

madskjeldgaard avatar May 18 '21 08:05 madskjeldgaard

Okay, changing that function in nvim-treesitter to the following (which now includes a type check for whether or not it is a table) works:

-- Recurse locals results until a node is found.
-- The accumulator function is given
-- * The table of the node
-- * The node
-- * The full definition match `@definition.var.something` -> 'var.something'
-- * The last definition match `@definition.var.something` -> 'something'
-- @param The locals result
-- @param The accumulator function
-- @param The full match path to append to
-- @param The last match
function M.recurse_local_nodes(local_def, accumulator, full_match, last_match)
	if local_def.node then
		accumulator(local_def, local_def.node, full_match, last_match)
	else
		if(type(local_def) == "table") then
			for match_key, def in pairs(local_def) do
				M.recurse_local_nodes(
				def,
				accumulator,
				full_match and (full_match..'.'..match_key) or match_key,
				match_key)
			end
		end
	end
end

@theHamsta should this function perhaps generally type check to make sure it is a table?

madskjeldgaard avatar May 18 '21 08:05 madskjeldgaard

should this function perhaps generally type check to make sure it is a table?

That makes sense, feel free to open a PR with that change!

stsewd avatar May 21 '21 16:05 stsewd

should this function perhaps generally type check to make sure it is a table?

That makes sense, feel free to open a PR with that change!

Yes I'll do a PR :)

madskjeldgaard avatar May 21 '21 19:05 madskjeldgaard