📖

[備忘録] NeovimでTreeSitterを使ってコメント中のNOTEやFIXMEをハイライトする方法

2023/11/08に公開

実現方法

1. comment モジュールのインストール

comment という TreeSitter module が、まさにそのための機能を提供してくれている。
この module は NOTE:FIX(hoge) などの構文を解析してくれる。
Playground もあるので触ってみるととても分かりやすい。

2. ハイライトの設定

コメント中の NOTETODO はそれぞれ @text.note@text.todo グループとしてキャプチャされる。
この対応は、 comment モジュールではなく TreeSitter 本体が設定している。
comment モジュールはあくまでも構文解析をするのみで、クエリの設定(その解析結果の構文木のどの部分を何というグループでキャプチャするかの設定)はモジュールの利用者、基本的には TreeSitter 本体が行っている。
実際にその設定を行っている部分は↓

https://github.com/nvim-treesitter/nvim-treesitter/blob/master/queries/comment/highlights.scm

これをみると、 @text.todo, @text.note, @text.warning, @text.danger グループにハイライトを設定してあげれば良さそうということがわかる。

@text.todo だけは元から設定されていたので、他のグループのハイライトをとりあえず以下のように設定してみた。
この設定は、それぞれのグループを molokai で設定されてるハイライトにリンクしている。

vim.api.nvim_set_hl(0, "@text.note", { link = "ModeMsg" })
vim.api.nvim_set_hl(0, "@text.warning", { link = "Error" })
vim.api.nvim_set_hl(0, "@text.danger", { link = "ErrorMsg" })

わかっていないこと

Discussion