From a87ea0386110eeeaad47b140b9155abd4c235f64 Mon Sep 17 00:00:00 2001 From: William Boman Date: Thu, 14 Oct 2021 22:52:23 +0200 Subject: add eslint, deprecate eslintls (#149) --- lua/nvim-lsp-installer/server.lua | 1 + lua/nvim-lsp-installer/servers/eslint/README.md | 38 ++++++++++++++ lua/nvim-lsp-installer/servers/eslint/init.lua | 1 + lua/nvim-lsp-installer/servers/eslintls/README.md | 38 -------------- lua/nvim-lsp-installer/servers/eslintls/init.lua | 4 ++ lua/nvim-lsp-installer/servers/init.lua | 2 + lua/nvim-lsp-installer/ui/status-win/init.lua | 60 +++++++++++++++++------ 7 files changed, 91 insertions(+), 53 deletions(-) create mode 100644 lua/nvim-lsp-installer/servers/eslint/README.md create mode 100644 lua/nvim-lsp-installer/servers/eslint/init.lua delete mode 100644 lua/nvim-lsp-installer/servers/eslintls/README.md (limited to 'lua') diff --git a/lua/nvim-lsp-installer/server.lua b/lua/nvim-lsp-installer/server.lua index 1240d349..ba90c5cf 100644 --- a/lua/nvim-lsp-installer/server.lua +++ b/lua/nvim-lsp-installer/server.lua @@ -41,6 +41,7 @@ function M.Server:new(opts) name = opts.name, root_dir = opts.root_dir, homepage = opts.homepage, + deprecated = opts.deprecated, _root_dir = opts.root_dir, -- @deprecated Use the `root_dir` property instead. _installer = type(opts.installer) == "function" and opts.installer or installers.pipe(opts.installer), _default_options = opts.default_options, diff --git a/lua/nvim-lsp-installer/servers/eslint/README.md b/lua/nvim-lsp-installer/servers/eslint/README.md new file mode 100644 index 00000000..557e986b --- /dev/null +++ b/lua/nvim-lsp-installer/servers/eslint/README.md @@ -0,0 +1,38 @@ +# eslint + +## Enabling document formatting + +To make the `eslint` server respond to `textDocument/formatting` LSP requests, you need to manually enable this +setting. This is done when setting up the LSP server, like so: + +```lua +local lsp_installer = require "nvim-lsp-installer" + +function common_on_attach(client, bufnr) ... end + +lsp_installer.on_server_ready(function (server) + local opts = { + on_attach = common_on_attach, + } + + if server.name == "eslint" then + opts.on_attach = function (client, bufnr) + -- neovim's LSP client does not currently support dynamic capabilities registration, so we need to set + -- the resolved capabilities of the eslint server ourselves! + client.resolved_capabilities.document_formatting = true + common_on_attach(client, bufnr) + end + opts.settings = { + format = { enable = true }, -- this will enable formatting + } + end + + server:setup(opts) +end) +``` + +This will make `eslint` respond to formatting requests, for example when triggered through: + +- `:lua vim.lsp.buf.formatting()` +- `:lua vim.lsp.buf.formatting_seq_sync()` +- `:lua vim.lsp.buf.formatting_sync()` diff --git a/lua/nvim-lsp-installer/servers/eslint/init.lua b/lua/nvim-lsp-installer/servers/eslint/init.lua new file mode 100644 index 00000000..21979405 --- /dev/null +++ b/lua/nvim-lsp-installer/servers/eslint/init.lua @@ -0,0 +1 @@ +return require "nvim-lsp-installer.servers.vscode-langservers-extracted" "vscode-eslint-language-server" diff --git a/lua/nvim-lsp-installer/servers/eslintls/README.md b/lua/nvim-lsp-installer/servers/eslintls/README.md deleted file mode 100644 index 2a5307df..00000000 --- a/lua/nvim-lsp-installer/servers/eslintls/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# eslintls - -## Enabling document formatting - -To make the `eslintls` server respond to `textDocument/formatting` LSP requests, you need to manually enable this -setting. This is done when setting up the LSP server, like so: - -```lua -local lsp_installer = require "nvim-lsp-installer" - -function common_on_attach(client, bufnr) ... end - -lsp_installer.on_server_ready(function (server) - local opts = { - on_attach = common_on_attach, - } - - if server.name == "eslintls" then - opts.on_attach = function (client, bufnr) - -- neovim's LSP client does not currently support dynamic capabilities registration, so we need to set - -- the resolved capabilities of the eslintls server ourselves! - client.resolved_capabilities.document_formatting = true - common_on_attach(client, bufnr) - end - opts.settings = { - format = { enable = true }, -- this will enable formatting - } - end - - server:setup(opts) -end) -``` - -This will make `eslintls` respond to formatting requests, for example when triggered through: - -- `:lua vim.lsp.buf.formatting()` -- `:lua vim.lsp.buf.formatting_seq_sync()` -- `:lua vim.lsp.buf.formatting_sync()` diff --git a/lua/nvim-lsp-installer/servers/eslintls/init.lua b/lua/nvim-lsp-installer/servers/eslintls/init.lua index 3e9d3cc3..7ffad30f 100644 --- a/lua/nvim-lsp-installer/servers/eslintls/init.lua +++ b/lua/nvim-lsp-installer/servers/eslintls/init.lua @@ -15,6 +15,10 @@ return function(name, root_dir) return server.Server:new { name = name, root_dir = root_dir, + deprecated = { + message = "eslintls has been replaced with eslint. It's still the same server - just a different name and upstream dependencies.", + replace_with = "eslint", + }, installer = { std.git_clone "https://github.com/microsoft/vscode-eslint", npm.install(), diff --git a/lua/nvim-lsp-installer/servers/init.lua b/lua/nvim-lsp-installer/servers/init.lua index 35c23627..cdef8780 100644 --- a/lua/nvim-lsp-installer/servers/init.lua +++ b/lua/nvim-lsp-installer/servers/init.lua @@ -20,6 +20,7 @@ local INSTALL_DIRS = { ["dockerls"] = "dockerfile", ["elixirls"] = "elixir", ["elmls"] = "elm", + ["eslint"] = "vscode-eslint", ["eslintls"] = "eslint", ["gopls"] = "go", ["hls"] = "haskell", @@ -57,6 +58,7 @@ local CORE_SERVERS = Data.set_of { "ember", "emmet_ls", "erlangls", + "eslint", "eslintls", "fortls", "gopls", diff --git a/lua/nvim-lsp-installer/ui/status-win/init.lua b/lua/nvim-lsp-installer/ui/status-win/init.lua index 56cfbe9d..60454419 100644 --- a/lua/nvim-lsp-installer/ui/status-win/init.lua +++ b/lua/nvim-lsp-installer/ui/status-win/init.lua @@ -138,21 +138,40 @@ local function get_relative_install_time(time) end local function ServerMetadata(server) - return Ui.Table(Data.list_not_nil( - Data.lazy(server.metadata.install_timestamp_seconds, function() - return { - { "last updated", "LspInstallerMuted" }, - { get_relative_install_time(server.metadata.install_timestamp_seconds), "" }, - } + return Ui.Node(Data.list_not_nil( + Data.lazy(server.is_installed and server.deprecated, function() + return Ui.Node(Data.list_not_nil( + Ui.HlTextNode { server.deprecated.message, "Comment" }, + Data.lazy(server.deprecated.replace_with, function() + return Ui.Node { + Ui.HlTextNode { + { + { "Replace with: ", "LspInstallerMuted" }, + { server.deprecated.replace_with, "LspInstallerHighlighted" }, + }, + }, + Ui.Keybind("", "REPLACE_SERVER", { server.name, server.deprecated.replace_with }), + Ui.EmptyLine(), + } + end) + )) end), - Data.when(server.is_installed, { - { "path", "LspInstallerMuted" }, - { server.metadata.install_dir, "" }, - }), - { - { "homepage", "LspInstallerMuted" }, - { server.metadata.homepage or "-", "" }, - } + Ui.Table(Data.list_not_nil( + Data.lazy(server.metadata.install_timestamp_seconds, function() + return { + { "last updated", "LspInstallerMuted" }, + { get_relative_install_time(server.metadata.install_timestamp_seconds), "" }, + } + end), + Data.when(server.is_installed, { + { "path", "LspInstallerMuted" }, + { server.metadata.install_dir, "" }, + }), + { + { "homepage", "LspInstallerMuted" }, + { server.metadata.homepage or "-", "" }, + } + )) )) end @@ -163,7 +182,8 @@ local function InstalledServers(servers, expanded_server) Ui.HlTextNode { Data.list_not_nil( { settings.current.ui.icons.server_installed, "LspInstallerGreen" }, - { " " .. server.name, "" } + { " " .. server.name, "" }, + Data.when(server.deprecated, { " deprecated", "LspInstallerOrange" }) ), }, Ui.Keybind(settings.current.ui.keymaps.toggle_server_expand, "EXPAND_SERVER", { server.name }), @@ -340,6 +360,7 @@ local function create_initial_server_state(server) return { name = server.name, is_installed = server:is_installed(), + deprecated = server.deprecated, metadata = { homepage = server.homepage, install_timestamp_seconds = nil, -- lazy @@ -571,6 +592,15 @@ local function init(all_servers) uninstall_server(server) end end, + ["REPLACE_SERVER"] = function(e) + local old_server_name, new_server_name = e.payload[1], e.payload[2] + local old_ok, old_server = lsp_servers.get_server(old_server_name) + local new_ok, new_server = lsp_servers.get_server(new_server_name) + if old_ok and new_ok then + uninstall_server(old_server) + install_server(new_server) + end + end, }, } end -- cgit v1.2.3-70-g09d2