neovimでvim-neon-darkでエラーが出た
Posted:
発生したエラー
Error in decoration provider treesitter/highlighter.line:
Error executing lua: .../vim-neon-dark/lua/vim-neon-dark.lua:55: attempt to call field 'get_node_text' (a nil value)
Tree-sitter のハイライト系統の内部で、vim-neon-dark テーマの Lua コードから get_node_text を呼び出していることが原因でした。
検証ログ
Neovim のバージョン
nvim --version
NVIM v0.10.5-dev-22+g0c995c0efb
vim.treesitter.get_node_text が実行時に nil か確認
:lua print(vim.inspect(vim.treesitter.get_node_text))
結果:
<function 1>
→ Neovim 側に関数は存在する
ldd で Tree-sitter が外部ライブラリか確認
ldd $(which nvim) | grep tree-sitter
結果: 空。→ Neovim 側に静的リンクされていると分かる
原因
- vim-neon-dark の Lua コード内で vim.treesitter.query.get_node_text() を呼び出している
- これは Neovim 0.10 以上では存在しない (deprecated)
- vim.treesitter.get_node_text() を使ってみた
対処
エラーの起点
~/.local/share/nvim/lazy/vim-neon-dark/lua/vim-neon-dark.lua
local node_text = query.get_node_text(node, source)
修正後
local node_text = vim.treesitter.get_node_text(node, source)
下記の 2 ヶ所の修正が必要でした:
- noneof 関数
- notmatch 関数
pull requestを見ると別件だけどtree-sitter周りの変更は対応中な模様 Fix deprecation warning for treesitter in neovim 0.10 by Eragonfr · Pull Request #3 · nonetallt/vim-neon-dark