aboutsummaryrefslogtreecommitdiffstats
path: root/lsp/vtsls.lua
diff options
context:
space:
mode:
authorFidel Yin <fidel.yin@hotmail.com>2025-07-10 21:14:43 +0800
committerGitHub <noreply@github.com>2025-07-10 06:14:43 -0700
commit85379d02d3bac8dc68129a4b81d7dbd00c8b0f77 (patch)
tree3339dab7392077501669219c0f273307df7b1a04 /lsp/vtsls.lua
parentdocs: update configs.md (diff)
downloadnvim-lspconfig-85379d02d3bac8dc68129a4b81d7dbd00c8b0f77.tar
nvim-lspconfig-85379d02d3bac8dc68129a4b81d7dbd00c8b0f77.tar.gz
nvim-lspconfig-85379d02d3bac8dc68129a4b81d7dbd00c8b0f77.tar.bz2
nvim-lspconfig-85379d02d3bac8dc68129a4b81d7dbd00c8b0f77.tar.lz
nvim-lspconfig-85379d02d3bac8dc68129a4b81d7dbd00c8b0f77.tar.xz
nvim-lspconfig-85379d02d3bac8dc68129a4b81d7dbd00c8b0f77.tar.zst
nvim-lspconfig-85379d02d3bac8dc68129a4b81d7dbd00c8b0f77.zip
fix(vue_ls): support `vue_ls` v3 #3943
Problem: `vue_ls` made breaking changes to its config in v3. Solution: Change the typescript language server for `vue_ls` from `ts_ls` to `vtsls`. Add a client handler to communicate between `vue_ls` and `vtsls`. Remove `typescript.tsdk` option. Remove documentation for the deprecated takeover mode.
Diffstat (limited to 'lsp/vtsls.lua')
-rw-r--r--lsp/vtsls.lua47
1 files changed, 47 insertions, 0 deletions
diff --git a/lsp/vtsls.lua b/lsp/vtsls.lua
index dc8410fa..7b8c0b30 100644
--- a/lsp/vtsls.lua
+++ b/lsp/vtsls.lua
@@ -11,6 +11,53 @@
--- [`tsconfig.json`](https://www.typescriptlang.org/docs/handbook/tsconfig-json.html)
--- or [`jsconfig.json`](https://code.visualstudio.com/docs/languages/jsconfig) to
--- the root of your project.
+---
+--- ### Vue support
+---
+--- Since v3.0.0, the Vue language server requires `vtsls` to support TypeScript.
+---
+--- ```
+--- -- If you are using mason.nvim, you can get the ts_plugin_path like this
+--- -- For Mason v1,
+--- -- local mason_registry = require('mason-registry')
+--- -- local vue_language_server_path = mason_registry.get_package('vue-language-server'):get_install_path() .. '/node_modules/@vue/language-server'
+--- -- For Mason v2,
+--- -- local vue_language_server_path = vim.fn.expand '$MASON/packages' .. '/vue-language-server' .. '/node_modules/@vue/language-server'
+--- -- or even
+--- -- local vue_language_server_path = vim.fn.stdpath('data') .. "/mason/packages/vue-language-server/node_modules/@vue/language-server"
+--- local vue_language_server_path = '/path/to/@vue/language-server'
+--- local vue_plugin = {
+--- name = '@vue/typescript-plugin',
+--- location = vue_language_server_path,
+--- languages = { 'vue' },
+--- configNamespace = 'typescript',
+--- }
+--- vim.lsp.config('vtsls', {
+--- settings = {
+--- vtsls = {
+--- tsserver = {
+--- globalPlugins = {
+--- vue_plugin,
+--- },
+--- },
+--- },
+--- },
+--- filetypes = { 'typescript', 'javascript', 'javascriptreact', 'typescriptreact', 'vue' },
+--- })
+--- ```
+---
+--- - `location` MUST be defined. If the plugin is installed in `node_modules`, `location` can have any value.
+--- - `languages` must include vue even if it is listed in filetypes.
+--- - `filetypes` is extended here to include Vue SFC.
+---
+--- You must make sure the Vue language server is setup. For example,
+---
+--- ```
+--- vim.lsp.enable('vue_ls')
+--- ```
+---
+--- See `vue_ls` section and https://github.com/vuejs/language-tools/wiki/Neovim for more information.
+
return {
cmd = { 'vtsls', '--stdio' },
filetypes = {