aboutsummaryrefslogtreecommitdiffstats
path: root/lua/pi/lsp/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/pi/lsp/init.lua')
-rw-r--r--lua/pi/lsp/init.lua45
1 files changed, 42 insertions, 3 deletions
diff --git a/lua/pi/lsp/init.lua b/lua/pi/lsp/init.lua
index 64d09b7..31b5161 100644
--- a/lua/pi/lsp/init.lua
+++ b/lua/pi/lsp/init.lua
@@ -2,8 +2,14 @@ return {
setup = function(ops)
ops = vim.tbl_deep_extend("force", require "pi.lsp.default", ops)
- local lspconfig = require "lspconfig"
- require('lspconfig.ui.windows').default_options.border = 'single'
+ -- Configure LSP border for native LSP
+ vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, {
+ border = "single",
+ })
+ vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, {
+ border = "single",
+ })
+
local mason_servers = {}
for server, options in pairs(ops.servers) do
if options.enable == true then
@@ -14,7 +20,40 @@ return {
else
server_options = definition(options)
end
- lspconfig[server].setup(server_options)
+
+ -- Setup the server with native LSP
+ local client_config = vim.tbl_extend("force", {
+ name = server,
+ cmd = server_options.cmd or ops.get_server_cmd(server),
+ root_dir = server_options.root_dir or ops.get_default_root_dir(),
+ settings = server_options.settings,
+ init_options = server_options.init_options,
+ on_attach = server_options.on_attach,
+ capabilities = server_options.capabilities,
+ filetypes = server_options.filetypes,
+ }, server_options)
+
+ -- Auto-start LSP for appropriate filetypes
+ if client_config.filetypes then
+ vim.api.nvim_create_autocmd("FileType", {
+ pattern = client_config.filetypes,
+ callback = function(ev)
+ -- Only start if no client of this type is already attached
+ local clients = vim.lsp.get_clients({ bufnr = ev.buf, name = server })
+ if #clients == 0 then
+ -- Create a copy of config for this buffer
+ local buf_config = vim.deepcopy(client_config)
+ if buf_config.root_dir and type(buf_config.root_dir) == "function" then
+ buf_config.root_dir = buf_config.root_dir(vim.api.nvim_buf_get_name(ev.buf))
+ end
+ vim.lsp.start(buf_config, {
+ bufnr = ev.buf,
+ })
+ end
+ end,
+ })
+ end
+
table.insert(mason_servers, server)
end
end