neovimでvim-neon-darkでエラーが出た

発生したエラー

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