MENU

Let ‘tree-sitter-comment’ highlight over LSP on ‘@comment’

nvim
目次

nvim + tree-sitter-comment

TODO: などをカラフルに目立たせたいので、 tree-sitter-comment をインストールした。

:TSInstall comment

ほとんどの言語は問題なくカラフルに表示される。
Most languages ​​are displayed colorfully without any problems.

でも lua の場合はカラフルにならない。
But in the case of lua, it is not colorful.

-- TODO: todo
-- INFO: info
-- HINT: hint
-- WARN: warn
-- ERROR: error

正確には、最初 lua ファイルを開いた時にはカラフルにハイライトされているが、LSP 解析が完了したと同時にそのカラフルな色が消えて、通常のコメントと同じ色になる。
To be precise, when you open the file, it is highlighted colorfully, but as soon as the LSP analysis is completed, the colorful color disappears and becomes the same color as a normal comment.

試しに :LspStop すると、ハイライトが復活した。こりゃLSPが原因だ。
When I tried :LspStop, the highlights were restored. I guess it’s because of LSP.

TODO 等の部分で :Inspect してみると、以下のように表示される。
When I try :Inspect on TODO etc., I get this.

Treesitter
  - @comment.lua links to @comment lua
  - @spell.lua links to @spell lua
  - @comment.todo.comment links to Todo comment
  - @nospell.comment links to @nospell comment

Semantic Tokens
  - @lsp.type.comment.lua links to @lsp.type.comment priority: 125

つまり、lsp (私の環境の場合は lua_ls) が @lsp.type.comment.lua という優先度の高い (125) ハイライトを、@comment.todo の上から上書きしてしまっているようだ。
It seems that lsp (lua_ls in my environment) overwrites the high priority (125) highlight @lsp.type.comment.lua from above @comment.todo.

Solution 解決策

検索したら、 tree-sitter-comment の issue に上がっていました。
I found an issue on github.

Bug: Comment tags conflicting with LSP? · Issue #22 · stsewd/tree-sitter-comment
https://github.com/stsewd/tree-sitter-comment/issues/22

上記ではいくつかの対策が書かれていますが、LSP による追加のハイライトやコード解析を完全停止されても困るので、私が使ったのはこれ。
There are several countermeasures listed above, but I don’t want to completely stop additional highlighting and code analysis by LSP, so this is what I used.

-- Disable Lsp's highlight on comment
vim.api.nvim_set_hl(0, '@lsp.type.comment', {})

上記コードを、nvim-lspconfig.lua の lua_ls の on_attach に記述する。

return {
   'neovim/nvim-lspconfig',
   config = function()
      local capabilities = require('cmp_nvim_lsp').default_capabilities()
      require('lspconfig')['lua_ls'].setup({
         filetypes = { 'lua', 'luau' },
         capabilities = capabilities,
         on_attach = function(client, bufnr)
            -- Disable lua_ls's highlight on comment over @comment.*
            vim.api.nvim_set_hl(0, '@lsp.type.comment', {})
         end,
      })
   end,
}

これで、lua でのみ、lua_ls 適用時に自動的に @lsp.type.comment がクリアされ無効になる。
Now, only in lua, @lsp.type.comment is automatically cleared and disabled when lua_ls is applied.

「問題は nvim でも treesitter でも tree-sitter-comment でもなく、lua_ls が @lsp.type.comment で上書きしてしまうことなので、上書きしないようにしてもらうのが筋では」と書かれていたような気がします。
The problem is not nvim, treesitter, or tree-sitter-comment, but the problem is that lsp or lua_ls overwrites @lsp.type.comment on @comment.
So the idea is to prevent lsp(or lua_ls) from overwriting, they said.

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次