(nvim-lspconfig を使用) denops と tsserver を切り替える

n番煎じである

構成

.config/vim/lua/lsp/
├── denols.lua
├── tsserver.lua
...(ry
lua
if vim.fn.exepath('deno') ~= '' then  vim.g.markdown_fenced_languages = {    'ts=typescript'  }  local lspconfig = require('lspconfig')  local util = require('libraries._set_lsp')  lspconfig.denols.setup{    cmd = { 'deno', 'lsp' },    root_dir = lspconfig.util.root_pattern("deno.json", "denops"),    on_attach = function(client, bufnr)      client.server_capabilities.document_formatting = false      util.on_attach(client, bufnr)    end,    capabilities = util.capabilities,    flags = util.flags,  }else  print('asdf install deno latest')end

tsserver.lua

lua
if vim.fn.exepath('typescript-language-server') ~= '' then  local lspconfig = require('lspconfig')  local util = require('libraries._set_lsp')  lspconfig.tsserver.setup {    root_dir = lspconfig.util.root_pattern("package.json"),    on_attach = util.on_attach,    capabilities = util.capabilities,    flags = util.flags,  }else  print('npm install -g typescript-language-server')end

解説

最初の if 分岐は、LSP がなかったら、動かせないので それの確認と、なければインストールコマンドを吐き出すようにしています。

ポイント

root_dir です

ここがキモ

denols だと

lua
root_dir = lspconfig.util.root_pattern("deno.json", "denops"),

root に deno.json か denops ってファイル or フォルダがあったら、動かすよ。 で

tsserver だと

lua
root_dir = lspconfig.util.root_pattern("package.json"),

root に package.json があったら動かすよ。

にそれぞれしています。

denols

正直 deno.json は僕はガッツリ Deno の開発をしないので、なんのこっちゃわからないです。
ただ、調べると割と使ってるプロジェクトが見つかったので、一応入れておきました。

じゃあ僕はいつ denols を使うのか、

denops を使った、Vim の Plugin 開発の時ですね。

denops で作る Vim Plugin は root に denops/ を配置するので、こうしました。

tsserver

説明不要。 package.json があればそれはもう Node です。

以上

これで切り替えができました。

なんか難しく考えてたけど、結構簡単でした。
できてよかった