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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
if vim.g.lspconfig ~= nil then
return
end
vim.g.lspconfig = 1
local version_info = vim.version()
if vim.fn.has 'nvim-0.7' ~= 1 then
local warning_str = string.format(
'[lspconfig] requires neovim 0.7 or later. Detected neovim version: 0.%s.%s',
version_info.minor,
version_info.patch
)
vim.notify_once(warning_str)
return
end
local lsp_complete_configured_servers = function(arg)
return vim.tbl_filter(function(s)
return s:sub(1, #arg) == arg
end, vim.tbl_keys(require 'lspconfig.configs'))
end
local lsp_get_active_client_ids = function(arg)
local clients = vim.tbl_map(function(client)
return ('%d (%s)'):format(client.id, client.name)
end, require('lspconfig.util').get_managed_clients())
return vim.tbl_filter(function(s)
return s:sub(1, #arg) == arg
end, clients)
end
local get_clients_from_cmd_args = function(arg)
local result = {}
for id in (arg or ''):gmatch '(%d+)' do
result[id] = vim.lsp.get_client_by_id(tonumber(id))
end
if vim.tbl_isempty(result) then
return require('lspconfig.util').get_managed_clients()
end
return vim.tbl_values(result)
end
-- Called from plugin/lspconfig.vim because it requires knowing that the last
-- script in scriptnames to be executed is lspconfig.
vim.api.nvim_create_user_command('LspInfo', function()
require 'lspconfig.ui.lspinfo'()
end, {
desc = 'Displays attached, active, and configured language servers',
})
vim.api.nvim_create_user_command('LspStart', function(info)
local server_name = info.args[1] ~= '' and info.args
if server_name then
local config = require('lspconfig.configs')[server_name]
if config then
config.launch()
end
else
local other_matching_configs = require('lspconfig.util').get_other_matching_providers(vim.bo.filetype)
for _, config in ipairs(other_matching_configs) do
config.launch()
end
end
end, {
desc = 'Manually launches a language server',
nargs = '?',
complete = lsp_complete_configured_servers,
})
vim.api.nvim_create_user_command('LspRestart', function(info)
for _, client in ipairs(get_clients_from_cmd_args(info.args)) do
client.stop()
vim.defer_fn(function()
require('lspconfig.configs')[client.name].launch()
end, 500)
end
end, {
desc = 'Manually restart the given language client(s)',
nargs = '?',
complete = lsp_get_active_client_ids,
})
vim.api.nvim_create_user_command('LspStop', function(info)
for _, client in ipairs(get_clients_from_cmd_args(info.args)) do
client.stop()
end
end, {
desc = 'Manually stops the given language client(s)',
nargs = '?',
complete = lsp_get_active_client_ids,
})
|