[[nvim-lspconfig]]にて、[[Vue3]]や[[Nuxt3]]のプロジェクトでは[[Volar]]を使用し、それ以外の[[TypeScript]]プロジェクトでは[[TypeScript Language Server]]を使用する方法。 ```lua -- VueやNuxtのプロジェクトでのみ有効にする lspconfig.volar.setup({ filetypes = { "typescript", "javascript", "javascriptreact", "typescriptreact", "vue", "json" }, capabilities = capabilities, root_dir = util.root_pattern("vite.config.ts", "nuxt.config.ts"), on_new_config = function(new_config, new_root_dir) new_config.init_options.typescript.tsdk = get_typescript_server_path(new_root_dir) end, }) -- VueやNuxtのプロジェクトでなければtsserverを使う lspconfig.tsserver.setup({ single_file_support = false, root_dir = function(fname) -- VueやNuxtのプロジェクトではVolarに任せるので無効にする if util.root_pattern("vite.config.ts", "nuxt.config.ts")(fname) then return nil end return util.root_pattern("tsconfig.json")(fname) end, }) ``` ## VueやNuxtのプロジェクトでのみVolarを有効化 ポイントは`root_dir`のところ。 `vite.config.ts`か`nuxt.config.ts`があった場合のみ[[Volar]]を有効にする。それ以外のケースでは[[Volar]]を有効にしないので、[[React]]や通常の[[TypeScript]]プロジェクトでは[[Volar]]が有効にならない。 ```lua root_dir = util.root_pattern("vite.config.ts", "nuxt.config.ts"), ``` > [!hint] > ここでは[[Takeover Mode]]を使用する前提としている。 ## VueやNuxtのプロジェクトでなければTypeScript Language Serverを有効 ポイントは`single_file_support`と`root_dir`。 ### single_file_support ```lua single_file_support = false, ``` `tsserver`の場合、`single_file_support`は`true`に設定されているため、明示的に`false`にする。こうしないと、`root_dir`と見なさなかった(期待するファイルが存在しなかった)場合でも[[Language Server]]が起動してしまう。 ### root_dir ```lua root_dir = function(fname) -- VueやNuxtのプロジェクトではVolarに任せるので無効にする if util.root_pattern("vite.config.ts", "nuxt.config.ts")(fname) then return nil end return util.root_pattern("tsconfig.json")(fname) end, ``` `vite.config.ts`や`nuxt.config.ts`が存在する場合は、[[Volar]]との同時起動を防ぐために起動しない。 また、`tsconfig.json`が存在しなかった場合も、[[TypeScript]]プロジェクトではないため起動しない。