diff options
| author | William Boman <william@redwill.se> | 2021-10-23 02:02:29 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-10-23 02:02:29 +0200 |
| commit | 1ad71df31d399fe13df253167283032fb7f28020 (patch) | |
| tree | 0f7c9df338f0388695c6b7bfaa0ef550ab0cd6c9 /lua/nvim-lsp-installer/ui/status-win/init.lua | |
| parent | Revert "access environ via vim.loop" (diff) | |
| download | mason-1ad71df31d399fe13df253167283032fb7f28020.tar mason-1ad71df31d399fe13df253167283032fb7f28020.tar.gz mason-1ad71df31d399fe13df253167283032fb7f28020.tar.bz2 mason-1ad71df31d399fe13df253167283032fb7f28020.tar.lz mason-1ad71df31d399fe13df253167283032fb7f28020.tar.xz mason-1ad71df31d399fe13df253167283032fb7f28020.tar.zst mason-1ad71df31d399fe13df253167283032fb7f28020.zip | |
map filetype to servers, promote relevant servers in the UI (#190)
Uninstalled servers that map to a filetype that is open in any buffer will be hoisted in
the UI list.
Diffstat (limited to 'lua/nvim-lsp-installer/ui/status-win/init.lua')
| -rw-r--r-- | lua/nvim-lsp-installer/ui/status-win/init.lua | 51 |
1 files changed, 40 insertions, 11 deletions
diff --git a/lua/nvim-lsp-installer/ui/status-win/init.lua b/lua/nvim-lsp-installer/ui/status-win/init.lua index 3d582111..3eb7b206 100644 --- a/lua/nvim-lsp-installer/ui/status-win/init.lua +++ b/lua/nvim-lsp-installer/ui/status-win/init.lua @@ -5,6 +5,7 @@ local Data = require "nvim-lsp-installer.data" local display = require "nvim-lsp-installer.ui.display" local settings = require "nvim-lsp-installer.settings" local lsp_servers = require "nvim-lsp-installer.servers" +local filetype_map = require "nvim-lsp-installer._generated.filetype_map" local HELP_KEYMAP = "?" local CLOSE_WINDOW_KEYMAP_1 = "<Esc>" @@ -201,9 +202,9 @@ local function ServerMetadata(server) )) end -local function InstalledServers(servers, expanded_server) +local function InstalledServers(servers, props) return Ui.Node(Data.list_map(function(server) - local is_expanded = expanded_server == server.name + local is_expanded = props.expanded_server == server.name return Ui.Node { Ui.HlTextNode { Data.list_not_nil( @@ -273,15 +274,20 @@ local function PendingServers(servers) end, servers)) end -local function UninstalledServers(servers, expanded_server) +local function UninstalledServers(servers, props) return Ui.Node(Data.list_map(function(server) - local is_expanded = expanded_server == server.name + local is_prioritized = props.prioritized_servers[server.name] + local is_expanded = props.expanded_server == server.name return Ui.Node { Ui.HlTextNode { Data.list_not_nil( - { settings.current.ui.icons.server_uninstalled, "LspInstallerMuted" }, + { + settings.current.ui.icons.server_uninstalled, + is_prioritized and "LspInstallerHighlighted" or "LspInstallerMuted", + }, { " " .. server.name, "LspInstallerMuted" }, - Data.when(server.uninstaller.has_run, { " (uninstalled)", "Comment" }) + Data.when(server.uninstaller.has_run, { " (uninstalled)", "Comment" }), + Data.when(server.deprecated, { " deprecated", "LspInstallerOrange" }) ), }, Ui.Keybind(settings.current.ui.keymaps.toggle_server_expand, "EXPAND_SERVER", { server.name }), @@ -311,13 +317,13 @@ local function ServerGroup(props) count = total_server_count, }, Indent(Data.list_map(function(servers) - return props.renderer(servers, props.expanded_server) + return props.renderer(servers, props) end, props.servers)), } end) end -local function Servers(servers, expanded_server) +local function Servers(servers, expanded_server, prioritized_servers) local grouped_servers = { installed = {}, queued = {}, @@ -325,6 +331,7 @@ local function Servers(servers, expanded_server) uninstall_failed = {}, installing = {}, install_failed = {}, + uninstalled_prioritized = {}, uninstalled = {}, session_uninstalled = {}, } @@ -350,7 +357,11 @@ local function Servers(servers, expanded_server) elseif server.installer.has_run then grouped_servers.install_failed[#grouped_servers.install_failed + 1] = server else - grouped_servers.uninstalled[#grouped_servers.uninstalled + 1] = server + if prioritized_servers[server.name] then + grouped_servers.uninstalled_prioritized[#grouped_servers.uninstalled_prioritized + 1] = server + else + grouped_servers.uninstalled[#grouped_servers.uninstalled + 1] = server + end end end @@ -376,8 +387,13 @@ local function Servers(servers, expanded_server) ServerGroup { title = "Available servers", renderer = UninstalledServers, - servers = { grouped_servers.session_uninstalled, grouped_servers.uninstalled }, + servers = { + grouped_servers.session_uninstalled, + grouped_servers.uninstalled_prioritized, + grouped_servers.uninstalled, + }, expanded_server = expanded_server, + prioritized_servers = prioritized_servers, }, } end @@ -427,7 +443,7 @@ local function init(all_servers) return Help(state.is_current_settings_expanded, state.vader_saber_ticks) end), Ui.When(not state.is_showing_help, function() - return Servers(state.servers, state.expanded_server) + return Servers(state.servers, state.expanded_server, state.prioritized_servers) end), } end) @@ -441,6 +457,7 @@ local function init(all_servers) local mutate_state, get_state = window.init { servers = servers, is_showing_help = false, + prioritized_servers = {}, expanded_server = nil, help_command_text = "", -- for "animating" the ":help" text when toggling the help window vader_saber_ticks = 0, -- for "animating" the cowthvader lightsaber @@ -658,8 +675,20 @@ local function init(all_servers) } local function open() + local current_buf = vim.fn.bufnr "%" + local open_filetypes = vim.split(vim.api.nvim_exec([[ bufdo echo &filetype ]], true), "\n") + vim.cmd(("buffer %d"):format(current_buf)) + local prioritized_servers = {} + + for _, filetype in ipairs(open_filetypes) do + if filetype_map[filetype] then + vim.list_extend(prioritized_servers, filetype_map[filetype]) + end + end + mutate_state(function(state) state.is_showing_help = false + state.prioritized_servers = Data.set_of(prioritized_servers) end) window.open { |
