summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lua/lvim/core/info.lua4
-rw-r--r--lua/lvim/lsp/config.lua5
-rw-r--r--lua/lvim/lsp/manager.lua3
-rw-r--r--lua/lvim/lsp/utils.lua17
-rw-r--r--tests/config_loader_spec.lua8
-rw-r--r--tests/lsp_spec.lua36
-rw-r--r--utils/bin/test_runner.sh10
7 files changed, 44 insertions, 39 deletions
diff --git a/lua/lvim/core/info.lua b/lua/lvim/core/info.lua
index 5707cc30..fc87691e 100644
--- a/lua/lvim/core/info.lua
+++ b/lua/lvim/core/info.lua
@@ -61,11 +61,13 @@ local function make_client_info(client)
local client_enabled_caps = lsp_utils.get_client_capabilities(client.id)
local name = client.name
local id = client.id
+ local filetypes = lsp_utils.get_supported_filetypes(name)
local document_formatting = client.resolved_capabilities.document_formatting
local attached_buffers_list = table.concat(vim.lsp.get_buffers_by_client_id(client.id), ", ")
local client_info = {
fmt("* Name: %s", name),
fmt("* Id: [%s]", tostring(id)),
+ fmt("* filetype(s): [%s]", table.concat(filetypes, ", ")),
fmt("* Attached buffers: [%s]", tostring(attached_buffers_list)),
fmt("* Supports formatting: %s", tostring(document_formatting)),
}
@@ -106,7 +108,7 @@ function M.toggle_popup(ft)
local lsp_info = {
"Language Server Protocol (LSP) info",
- fmt "* Associated server(s):",
+ fmt "* Active server(s):",
}
for _, client in pairs(clients) do
diff --git a/lua/lvim/lsp/config.lua b/lua/lvim/lsp/config.lua
index 2d9104ea..ccc524ee 100644
--- a/lua/lvim/lsp/config.lua
+++ b/lua/lvim/lsp/config.lua
@@ -46,15 +46,20 @@ return {
"ansiblels",
"denols",
"ember",
+ "emmet_ls",
"eslint",
"eslintls",
+ "graphql",
"jedi_language_server",
+ "ltex",
+ "phpactor",
"pylsp",
"rome",
"sqlls",
"sqls",
"stylelint_lsp",
"tailwindcss",
+ "tflint",
"volar",
},
}
diff --git a/lua/lvim/lsp/manager.lua b/lua/lvim/lsp/manager.lua
index 128c7553..dbb7b87f 100644
--- a/lua/lvim/lsp/manager.lua
+++ b/lua/lvim/lsp/manager.lua
@@ -42,7 +42,7 @@ end
-- manually start the server and don't wait for the usual filetype trigger from lspconfig
local function buf_try_add(server_name, bufnr)
bufnr = bufnr or vim.api.nvim_get_current_buf()
- require("lspconfig")[server_name].manager.try_add(bufnr)
+ require("lspconfig")[server_name].manager.try_add_wrapper(bufnr)
end
---Setup a language server by providing a name
@@ -78,7 +78,6 @@ function M.setup(server_name, user_config)
end
install_notification = false
requested_server:setup(config)
- buf_try_add(server_name)
end)
else
-- since it may not be installed, don't attempt to configure the LSP unless there is a custom provider
diff --git a/lua/lvim/lsp/utils.lua b/lua/lvim/lsp/utils.lua
index a34fbf44..7cc8f54f 100644
--- a/lua/lvim/lsp/utils.lua
+++ b/lua/lvim/lsp/utils.lua
@@ -49,14 +49,17 @@ function M.get_client_capabilities(client_id)
end
function M.get_supported_filetypes(server_name)
- -- print("got filetypes query request for: " .. server_name)
- local configs = require "lspconfig/configs"
- pcall(require, ("lspconfig/" .. server_name))
- for _, config in pairs(configs) do
- if config.name == server_name then
- return config.document_config.default_config.filetypes or {}
- end
+ -- temporary workaround: https://github.com/neovim/nvim-lspconfig/pull/1358
+ if server_name == "dockerls" then
+ return { "dockerfile" }
+ end
+ local lsp_installer_servers = require "nvim-lsp-installer.servers"
+ local server_available, requested_server = lsp_installer_servers.get_server(server_name)
+ if not server_available then
+ return {}
end
+
+ return requested_server:get_supported_filetypes()
end
return M
diff --git a/tests/config_loader_spec.lua b/tests/config_loader_spec.lua
index 8e7ab339..1aef0974 100644
--- a/tests/config_loader_spec.lua
+++ b/tests/config_loader_spec.lua
@@ -1,5 +1,6 @@
local a = require "plenary.async_lib.tests"
local config = require "lvim.config"
+local utils = require "lvim.utils"
a.describe("config-loader", function()
local user_config_path = config:get_user_config_path()
@@ -20,18 +21,19 @@ a.describe("config-loader", function()
vim.opt.undodir = "/tmp"
assert.equal(vim.opt.undodir:get()[1], "/tmp")
config:reload()
- assert.equal(vim.opt.undodir:get()[1], get_cache_dir() .. "/undo")
+ assert.equal(vim.opt.undodir:get()[1], utils.join_paths(get_cache_dir(), "undo"))
end)
a.it("should not get interrupted by errors in user-config", function()
vim.opt.undodir = "/tmp"
assert.equal(vim.opt.undodir:get()[1], "/tmp")
- os.execute("echo bad_string_test >> " .. user_config_path)
+ os.execute(string.format("echo 'bad_string_test' >> %s", user_config_path))
local error_handler = function(msg)
return msg
end
local err = xpcall(config:reload(), error_handler)
assert.falsy(err)
- assert.equal(vim.opt.undodir:get()[1], get_cache_dir() .. "/undo")
+ assert.equal(vim.opt.undodir:get()[1], utils.join_paths(get_cache_dir(), "undo"))
+ os.execute(string.format("echo '' > %s", user_config_path))
end)
end)
diff --git a/tests/lsp_spec.lua b/tests/lsp_spec.lua
index 173810e0..b3bb59ab 100644
--- a/tests/lsp_spec.lua
+++ b/tests/lsp_spec.lua
@@ -44,29 +44,6 @@ a.describe("lsp workflow", function()
end)
end)
- a.it("shoud retrieve supported filetypes correctly", function()
- local ocaml = {
- name = "ocamlls",
- filetypes = { "ocaml", "reason" },
- }
- local ocaml_fts = require("lvim.lsp.utils").get_supported_filetypes(ocaml.name)
- assert.True(vim.deep_equal(ocaml.filetypes, ocaml_fts))
-
- local tsserver = {
- name = "tsserver",
- filetypes = {
- "javascript",
- "javascriptreact",
- "javascript.jsx",
- "typescript",
- "typescriptreact",
- "typescript.tsx",
- },
- }
- local tsserver_fts = require("lvim.lsp.utils").get_supported_filetypes(tsserver.name)
- assert.True(vim.deep_equal(tsserver.filetypes, tsserver_fts))
- end)
-
a.it("shoud not include blacklisted servers in the generated templates", function()
assert.True(utils.is_directory(lvim.lsp.templates_dir))
require("lvim.lsp").setup()
@@ -77,4 +54,17 @@ a.describe("lsp workflow", function()
end
end
end)
+
+ a.it("shoud only include one server per generated template", function()
+ assert.True(utils.is_directory(lvim.lsp.templates_dir))
+ require("lvim.lsp").setup()
+
+ for _, file in ipairs(vim.fn.glob(lvim.lsp.templates_dir .. "/*.lua", 1, 1)) do
+ local count = 0
+ for _ in io.lines(file) do
+ count = count + 1
+ end
+ assert.equal(count, 1)
+ end
+ end)
end)
diff --git a/utils/bin/test_runner.sh b/utils/bin/test_runner.sh
index ee138345..6fc6858b 100644
--- a/utils/bin/test_runner.sh
+++ b/utils/bin/test_runner.sh
@@ -1,15 +1,17 @@
#!/usr/bin/env bash
set -e
-export LUNARVIM_CONFIG_DIR="${LUNARVIM_CONFIG_DIR:-"$HOME/.config/lvim"}"
export LUNARVIM_RUNTIME_DIR="${LUNARVIM_RUNTIME_DIR:-"$HOME/.local/share/lunarvim"}"
export LVIM_TEST_ENV=true
-rm -f "$LUNARVIM_CONFIG_DIR/plugin/packer_compiled.lua"
+# we should start with an empty configuration
+TEST_BASE_DIR="$(mktemp -d)"
+
+export LUNARVIM_CONFIG_DIR="$TEST_BASE_DIR"
+export LUNARVIM_CACHE_DIR="$TEST_BASE_DIR"
lvim() {
- # TODO: allow running with a minimal_init.lua
nvim -u "$LUNARVIM_RUNTIME_DIR/lvim/tests/minimal_init.lua" --cmd "set runtimepath+=$LUNARVIM_RUNTIME_DIR/lvim" "$@"
}
@@ -18,3 +20,5 @@ if [ -n "$1" ]; then
else
lvim --headless -c "PlenaryBustedDirectory tests/ { minimal_init = './tests/minimal_init.lua' }"
fi
+
+rm -rf "$TEST_BASE_DIR"