🦕

neovim lsp でdenolsとtsserverを自動で切り替える

2022/06/18に公開

こんにちは、もちです。最近 deno を触り始めたのですが、neovimlsp で自動で denols と tsserver をいい感じに方法を調べたのでまとめます。

結論

まずは結論から。これで動きました。

lua
lspconfig["denols"].setup({
  root_dir = lspconfig.util.root_pattern("deno.json"),
  init_options = {
    lint = true,
    unstable = true,
    suggest = {
      imports = {
        hosts = {
          ["https://deno.land"] = true,
          ["https://cdn.nest.land"] = true,
          ["https://crux.land"] = true,
        },
      },
    },
  },

})
lspconfig["tsserver"].setup({
  root_dir = lspconfig.util.root_pattern("package.json"),
})

僕のコード

https://github.com/mochi-sann/nvim/blob/fded4cf1031599ac990511b8217b25f37a229dde/lua/plugconfig/nvim_cmp.lua#L202-L222

解説

root_dir = lspconfig.util.root_pattern("deno.json") この関数の root_pattern() の引数の部分にあるファイルがあるとそれぞれの LSP が有効になるようです。
denols ではdeno.jsonを、tsserver はpackage.jsonがあるかどうかで起動するように設定しました。

参考にしたもの

https://zenn.dev/kawarimidoll/articles/2b57745045b225

https://github.com/neovim/nvim-lspconfig/issues/320

https://github.com/neovim/nvim-lspconfig/blob/master/doc/lspconfig.txt#L334-L340

GitHubで編集を提案

Discussion