👻
Neovim Built-in LSPでフォーマッタの競合を回避する
prettier
をnull-ls
経由で導入した際,tsserver
のフォーマッタと競合して不便だったのでその回避策をまとめる.
解決方法
結論から言うと,vim.lsp.buf.format()
のfilter
オプションを使いtsserver
のフォーマッタだけを無効化すればよい.
vim.lsp.buf.format()
にはfilter
というオプションがある.
これを使えば,LSPフォーマッタを有効にするか無効にするかをクライアントごとに指定できる.
filter
には,LSPのクライアントを受け取りboolean
値を返す関数を指定する必要がある.
true
が返された場合,そのクライアントのフォーマッタが有効化される.false
が返された場合は無効化される.
vim.lsp.buf.format({
filter = function(client)
-- ここにフィルタ設定を記述
end
})
例えば,tsserver
のフォーマッタだけを無効化したいときは以下のように設定すればよい.
vim.lsp.buf.format({
filter = function(client)
return client.name ~= "tsserver"
end
})
Discussion