diff options
| author | Michael Lingelbach <m.j.lbach@gmail.com> | 2021-01-22 09:57:14 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-01-22 09:57:14 -0800 |
| commit | 0627dadc18c2c820c97c4bbca4ccd0f873cfceb3 (patch) | |
| tree | 982a94b72ae77a86afcc13dbb57b9d739d94ad58 /lua | |
| parent | Merge pull request #689 from ckipp01/dirname (diff) | |
| parent | lspinfo: move to module (diff) | |
| download | nvim-lspconfig-0627dadc18c2c820c97c4bbca4ccd0f873cfceb3.tar nvim-lspconfig-0627dadc18c2c820c97c4bbca4ccd0f873cfceb3.tar.gz nvim-lspconfig-0627dadc18c2c820c97c4bbca4ccd0f873cfceb3.tar.bz2 nvim-lspconfig-0627dadc18c2c820c97c4bbca4ccd0f873cfceb3.tar.lz nvim-lspconfig-0627dadc18c2c820c97c4bbca4ccd0f873cfceb3.tar.xz nvim-lspconfig-0627dadc18c2c820c97c4bbca4ccd0f873cfceb3.tar.zst nvim-lspconfig-0627dadc18c2c820c97c4bbca4ccd0f873cfceb3.zip | |
Merge pull request #672 from mjlbach/refactor_lspinfo
lspinfo: move to module
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/lspconfig.lua | 117 | ||||
| -rw-r--r-- | lua/lspconfig/lspinfo.lua | 117 |
2 files changed, 120 insertions, 114 deletions
diff --git a/lua/lspconfig.lua b/lua/lspconfig.lua index 13902893..7c43c22b 100644 --- a/lua/lspconfig.lua +++ b/lua/lspconfig.lua @@ -1,5 +1,5 @@ local configs = require 'lspconfig/configs' -local lspui = require 'lspconfig/_lspui' +local lspinfo = require 'lspconfig/lspinfo' local M = { util = require 'lspconfig/util'; @@ -21,121 +21,10 @@ function M._root._setup() M._root.commands = { LspInfo = { function() - -- These options need to be cached before switching to the floating - -- buffer. - local buf_clients = vim.lsp.buf_get_clients() - local clients = vim.lsp.get_active_clients() - local buffer_filetype = vim.bo.filetype - local buffer_dir = vim.fn.expand('%:p:h') - - local win_info = lspui.percentage_range_window(0.8, 0.7) - local bufnr, win_id = win_info.bufnr, win_info.win_id - - local buf_lines = {} - local header = { - "Available servers:", - "\t"..table.concat(vim.tbl_keys(configs), ', '), - "", - "Clients attached to this buffer: "..tostring(#buf_clients) - } - vim.list_extend(buf_lines, header) - - local function trim_whitespace(cmd) - local trimmed_cmd = {} - for _, str in ipairs(cmd) do - table.insert(trimmed_cmd, str:match'^%s*(.*)') - end - return trimmed_cmd - end - - local function remove_newlines(cmd) - cmd = trim_whitespace(cmd) - cmd = table.concat(cmd, ' ') - cmd = vim.split(cmd, '\n') - cmd = trim_whitespace(cmd) - cmd = table.concat(cmd, ' ') - return cmd - end - - local function make_client_info(client) - return { - "", - "Client: "..tostring(client.id), - "\tname: "..client.name, - "\troot: "..client.workspaceFolders[1].name, - "\tfiletypes: "..table.concat(client.config.filetypes or {}, ', '), - "\tcmd: "..remove_newlines(client.config.cmd), - } - end - - for _, client in ipairs(buf_clients) do - local client_info = make_client_info(client) - vim.list_extend(buf_lines, client_info) - end - - local active_section_header = { - "", - "Total active clients: "..tostring(#clients), - } - vim.list_extend(buf_lines, active_section_header) - for _, client in ipairs(clients) do - local client_info = make_client_info(client) - vim.list_extend(buf_lines, client_info) - end - local matching_config_header = { - "", - "Clients that match the current buffer filetype:", - } - local cmd_not_found_msg = "False. Please check your path and ensure the server is installed" - vim.list_extend(buf_lines, matching_config_header) - for _, config in pairs(configs) do - local cmd_is_executable, cmd - if config.cmd then - cmd = remove_newlines(config.cmd) - if vim.fn.executable(config.cmd[1]) == 1 then - cmd_is_executable = "True" - else - cmd_is_executable = cmd_not_found_msg - end - else - cmd = "cmd not defined" - cmd_is_executable = cmd - end - if config.filetypes then - for _, filetype_match in ipairs(config.filetypes) do - if buffer_filetype == filetype_match then - local matching_config_info = { - "", - "Config: "..config.name, - "\tcmd: "..cmd, - "\tcmd is executable: ".. cmd_is_executable, - "\tidentified root: "..(config.get_root_dir(buffer_dir) or "None"), - "\tcustom handlers: "..table.concat(vim.tbl_keys(config.handlers), ", "), - } - vim.list_extend(buf_lines, matching_config_info) - end - end - else - local matching_config_info = { - "", - "Config: "..config.name, - "\tfiletype: ".."No filetypes defined, please define filetypes in setup().", - } - vim.list_extend(buf_lines, matching_config_info) - end - end - buf_lines = vim.lsp.util._trim_and_pad(buf_lines, { pad_left = 2, pad_top = 1}) - vim.api.nvim_buf_set_lines(bufnr, 0, -1, true, buf_lines ) - vim.fn.matchadd("Title", table.concat(vim.tbl_keys(configs), '\\|')) - vim.fn.matchadd("Error", - "No filetypes defined, please define filetypes in setup().\\|".. - "cmd not defined\\|" .. - cmd_not_found_msg) - vim.api.nvim_buf_set_keymap(bufnr, 'n', '<esc>', '<cmd>bd<CR>', { noremap = true}) - vim.lsp.util.close_preview_autocmd({"BufHidden", "BufLeave"}, win_id) + lspinfo() end; "-nargs=?"; - description = '`:LspInfo` Displays info on currently configured and currently active servers'; + description = '`:LspInfo` Displays attached, active, and configured language servers'; }; LspInstall = { function() diff --git a/lua/lspconfig/lspinfo.lua b/lua/lspconfig/lspinfo.lua new file mode 100644 index 00000000..902cd87e --- /dev/null +++ b/lua/lspconfig/lspinfo.lua @@ -0,0 +1,117 @@ +local configs = require 'lspconfig/configs' +local lspui = require 'lspconfig/_lspui' + +return function () + -- These options need to be cached before switching to the floating + -- buffer. + local buf_clients = vim.lsp.buf_get_clients() + local clients = vim.lsp.get_active_clients() + local buffer_filetype = vim.bo.filetype + local buffer_dir = vim.fn.expand('%:p:h') + + local win_info = lspui.percentage_range_window(0.8, 0.7) + local bufnr, win_id = win_info.bufnr, win_info.win_id + + local buf_lines = {} + local header = { + "Available servers:", + "\t"..table.concat(vim.tbl_keys(configs), ', '), + "", + "Clients attached to this buffer: "..tostring(#buf_clients) + } + vim.list_extend(buf_lines, header) + + local function trim_whitespace(cmd) + local trimmed_cmd = {} + for _, str in ipairs(cmd) do + table.insert(trimmed_cmd, str:match'^%s*(.*)') + end + return trimmed_cmd + end + + local function remove_newlines(cmd) + cmd = trim_whitespace(cmd) + cmd = table.concat(cmd, ' ') + cmd = vim.split(cmd, '\n') + cmd = trim_whitespace(cmd) + cmd = table.concat(cmd, ' ') + return cmd + end + + local function make_client_info(client) + return { + "", + "Client: "..tostring(client.id), + "\tname: "..client.name, + "\troot: "..client.workspaceFolders[1].name, + "\tfiletypes: "..table.concat(client.config.filetypes or {}, ', '), + "\tcmd: "..remove_newlines(client.config.cmd), + } + end + + for _, client in ipairs(buf_clients) do + local client_info = make_client_info(client) + vim.list_extend(buf_lines, client_info) + end + + local active_section_header = { + "", + "Total active clients: "..tostring(#clients), + } + vim.list_extend(buf_lines, active_section_header) + for _, client in ipairs(clients) do + local client_info = make_client_info(client) + vim.list_extend(buf_lines, client_info) + end + local matching_config_header = { + "", + "Clients that match the current buffer filetype:", + } + local cmd_not_found_msg = "False. Please check your path and ensure the server is installed" + vim.list_extend(buf_lines, matching_config_header) + for _, config in pairs(configs) do + local cmd_is_executable, cmd + if config.cmd then + cmd = remove_newlines(config.cmd) + if vim.fn.executable(config.cmd[1]) == 1 then + cmd_is_executable = "True" + else + cmd_is_executable = cmd_not_found_msg + end + else + cmd = "cmd not defined" + cmd_is_executable = cmd + end + if config.filetypes then + for _, filetype_match in ipairs(config.filetypes) do + if buffer_filetype == filetype_match then + local matching_config_info = { + "", + "Config: "..config.name, + "\tcmd: "..cmd, + "\tcmd is executable: ".. cmd_is_executable, + "\tidentified root: "..(config.get_root_dir(buffer_dir) or "None"), + "\tcustom handlers: "..table.concat(vim.tbl_keys(config.handlers), ", "), + } + vim.list_extend(buf_lines, matching_config_info) + end + end + else + local matching_config_info = { + "", + "Config: "..config.name, + "\tfiletype: ".."No filetypes defined, please define filetypes in setup().", + } + vim.list_extend(buf_lines, matching_config_info) + end + end + buf_lines = vim.lsp.util._trim_and_pad(buf_lines, { pad_left = 2, pad_top = 1}) + vim.api.nvim_buf_set_lines(bufnr, 0, -1, true, buf_lines ) + vim.fn.matchadd("Title", table.concat(vim.tbl_keys(configs), '\\|')) + vim.fn.matchadd("Error", + "No filetypes defined, please define filetypes in setup().\\|".. + "cmd not defined\\|" .. + cmd_not_found_msg) + vim.api.nvim_buf_set_keymap(bufnr, 'n', '<esc>', '<cmd>bd<CR>', { noremap = true}) + vim.lsp.util.close_preview_autocmd({"BufHidden", "BufLeave"}, win_id) +end; |
