🫢

Neovimがtreesitter parser errorを出すようになってしまったのでworkaround

2024/03/16に公開

helpファイルを開いたときにこういうエラーが出るようになってしまいました。

BufReadPost Autocommands for "*" の処理中にエラーが検出されました:
Error executing lua callback: ...llar/neovim/HEAD-102a72a/share/nvim/runtime/filetype.lua:30: Error executing lua: ...llar/neovim/HEAD-102a72a/share/nvim/runtime/filetype.lua:31: BufReadPost Autocommands for "*"..FileType Autocommands for "*"..function <SNR>1_LoadFTPlugin[20]..script /opt/homebrew/Cellar/neovim/HEAD-102a72a/share/nvim/runtime/ftplugin/help.lua: Vim(runtime):E5113: Error while calling lua chunk: ...2a72a/share/nvim/runtime/lua/vim/treesitter/language.lua:104: no parser for 'vimdoc' language, see :help treesitter-parsers

必要なparserがないことによるエラーなのですが、parserがなければ静かにフォールバックしてほしいなと感じました。
個人的にはvimのhelpはtreesitterよりvim本体のハイライトのほうが適していると思っているので、parserを入れていません。

今回でいうと、エラーを出しているのは以下の部分です。

(neovim-path)/share/nvim/runtime/ftplugin/help.lua
-- use treesitter over syntax (for highlighted code blocks)
vim.treesitter.start()

これに関連したやりとりがありました:

https://github.com/neovim/neovim/pull/26347#issuecomment-1837508178

参考にしてvim.treesitter.start()を書き換えました。デフォルトの関数をpcallでラップして、エラーを黙らせます。

init.lua
vim.treesitter.start = (function(wrapped)
  return function(bufnr, lang)
    lang = lang or vim.fn.getbufvar(bufnr or '', '&filetype')
    pcall(wrapped, bufnr, lang)
  end
end)(vim.treesitter.start)

Discussion