几天没写 vue,回来发现我的 volar 莫名奇妙的失效了。上 github 一看才知道,原来 volar 2.0.0 之后不再提供 TypeScript
解析,需要由 tsserver
提供。
之前在 nvim 上配置 volar 需要将 tsserver 关掉,或者使用 neoconf.nvim 等工具在项目中将 tsserver 禁用。
然后使用 volar 的 takeover (接管?)模式直接解析 ts 文件。
不必多说,参考 nvim-lspconfig/doc/server_configurations.md at master · neovim/nvim-lspconfig · GitHub 直接开搞
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| local lspconfig = require('lspconfig')
local home = os.getenv("HOME")
require("mason-lspconfig").setup_handlers({
function(server_name)
local server_config = {}
if require("neoconf").get(server_name .. ".disable") then
return
end
if server_name == "tsserver" then
server_config.init_options = {
plugins = {{
name = "@vue/typescript-plugin",
location = home .. "/.local/share/pnpm/global/5/node_modules/@vue/typescript-plugin",
languages = { "javascript", "typescript", "vue" },
}
},
}
server_config.filetypes = { 'vue', 'typescript', 'javascript' }
end
if server_name == "volar" then
server_config.init_options = {
typescript = {
tsdk = home .. '/.local/share/pnpm/global/5/node_modules/typescript/lib',
}
}
server_config.filetypes = { 'vue', 'typescript', 'javascript' }
return
end
lspconfig[server_name].setup(server_config)
end,
});
|
我使用 mason-lspconfig
提供的回调函数,对于mason 中安装的所有 lsp server 进行统一的配置。
使用 pnpm 全局安装的包的位置需要自己调整。
需要注意的是 ~
并不能在 lua 中被解析为主目录,所以需要使用 lua 的接口获取主目录