For example, say I have the Svelte, Vue, or Ember/Glint language servers. They are all replacement for tsserver, and having tsserver running at the same time as each of those will cause duplicate diagnostics.
So, I’d like to configure each of these (I’ll PR to lspconfigs where I feel comfortable) to disable tsserver when they become active.
The VSCode folks have had similar desires:
I get close by doing this:
require('lspconfig').glint.setup {
on_attach = function()
for i, server in ipairs(vim.lsp.buf_get_clients()) do
print(server.name)
if server.name == 'tsserver' then
vim.lsp.get_client_by_id(server.id).stop()
end
end
end,
}
Unfortunately, it only works for the first buffer. When I open a second buffer, both tsserver and the glint server fire.:
app/components/header.ts 2
│ Function lacks ending return statement and return type does not include 'undefined'. typescript (2366) [15, 15]
│ Function lacks ending return statement and return type does not include 'undefined'. glint:ts(2366) [15, 15]
app/components/map.ts 1
│ A 'get' accessor must return a value. glint:ts(2378) [15, 7]
i use plugin GitHub - windwp/nvim-projectconfig: neovim projectconfig.
add this on your projectconfig file
vim.g.list_of_lsp_server = { ‘svelte’ , …}
on your lspconfig you can check if that variable have value . you can start server on that list only and skip another server
remeber you need to call projectconfig.setup first before lspconfig
i use plugin
But as an ecosystem contributor, we’re looking to solve this problem for everyone using this server configuration / combination – not just trying to solve “our” problem.
The other JavaScript/TypeScript ecosystems would benefit from such server-config control as well. We know that we 100% do not need tsserver
when X
is active (per buffer (need to stipulate this because in monorepos, it’s totally reasonable to have two projects open, one using X
and one with tsserver
))
I monkey-patch SERVER.manager.add
function
local tsserver_add = tsserver.manager.add
tsserver.manager.add = function(...)
local project = vim.g.project
if not vim.b.flow_active and project.kind ~= 'vue' then
return tsserver_add(...)
end
end