🧊

(Neo)vimで`.astro`ファイルを開くとエラーになることがある

エラーになるプロジェクトとそうでないプロジェクトもあって、なんやろうなって。

エラーについて

具体的には、こういうエラー。(ちょっと整形した)

Error detected while processing BufReadPost Autocommands for "*":
Error executing lua callback: ...w/Cellar/neovim/0.10.2_1/share/nvim/runtime/filetype.lua:35:
  Error executing lua: ...w/Cellar/neovim/0.10.2_1/share/nvim/runtime/filetype.lua:36:
    BufReadPost Autocommands for "*"..FileType Autocommands for "*"..function
      <SNR>1_LoadFTPlugin[20]..script /opt/homebrew/Cellar/neovim/0.10.2_1/share/nvim/runtime/ftplugin/astro.vim[163]..function
      <SNR>25_CollectPathsFromConfig, line 11: Vim(let):E474: Trailing comma: } }
stack traceback:
        [C]: in function 'nvim_cmd'
        ...w/Cellar/neovim/0.10.2_1/share/nvim/runtime/filetype.lua:36: in function <...w/Cellar/neovim/0.10.2_1/share/nvim/runtime/filetype.lua:35>
        [C]: in function 'nvim_buf_call'
        ...w/Cellar/neovim/0.10.2_1/share/nvim/runtime/filetype.lua:35: in function <...w/Cellar/neovim/0.10.2_1/share/nvim/runtime/filetype.lua:10>
stack traceback:
        [C]: in function 'nvim_buf_call'
        ...w/Cellar/neovim/0.10.2_1/share/nvim/runtime/filetype.lua:35: in function <...w/Cellar/neovim/0.10.2_1/share/nvim/runtime/filetype.lua:10>

nvimのバージョンも変えてみたけど、stableでもnightlyでも関係なかった。

拡張子ごとに自動で呼ばれる処理の中で、なにやらエラーが起きてるとのこと。

  • runtime/filetype.luaの処理の一連の流れの中の
  • runtime/ftplugin/astro.vimの中で
  • CollectPathsFromConfig()という処理中にエラー

エラーメッセージはTrailing comma:とだけで、なんのことやら。

該当部分のコードを見ても、別に怪しいカンマなんかない。

なぜ

あれこれ調べてみたところ、このCollectPathsFromConfig()は、tsconfig.jsonjsconfig.jsonを利用するらしい。

で、その過程でいわゆるJSONパースをしてて、そこが失敗してる模様。

https://github.com/neovim/neovim/blob/ba40a6dbe3a1c98a9f75e56c7cd08ecd522d27dd/runtime/ftplugin/astro.vim#L59

というのも、我らがTypeScriptのtsconfig.jsonは名ばかりだから。

JSON with Comments(.jsonc)やっけ?かなんかで、コメントも書けるし末尾カンマも許されるほぼJSみたいなJSONだから。

なので、正規のJSONを期待してるコードは、パースできずにエラーになっちゃう。

どうする

tsconfig.jsonを真のJSONフォーマットにした。

ちなみにこれ、NeovimじゃなくVimでも起きると思う。

https://github.com/vim/vim/blob/5ccac75d967e73669fd9dd5b83916a54a5989ae6/runtime/ftplugin/astro.vim#L59

というところで、Vimにパッチを投げ、Neovimに取り込まれるのを待ち・・・というのが正攻法なんやろうけど、それは時間があるときに・・・。