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.lua65
1 files changed, 65 insertions, 0 deletions
diff --git a/lua/pi/lsp/init.lua b/lua/pi/lsp/init.lua
new file mode 100644
index 0000000..4454639
--- /dev/null
+++ b/lua/pi/lsp/init.lua
@@ -0,0 +1,65 @@
+return {
+ setup = function(ops)
+ ops = vim.tbl_deep_extend("force", require "pi.lsp.default", ops)
+
+ local lspconfig = require "lspconfig"
+
+ local mason_servers = {}
+ for server, options in pairs(ops.servers) do
+ if options.enable == true then
+ local ok, definition = pcall(require, "pi.lsp.servers." .. server)
+ local server_options
+ if not ok then
+ server_options = ops.default_options(options)
+ else
+ server_options = definition(options)
+ end
+ lspconfig[server].setup(server_options)
+ table.insert(mason_servers, server)
+ end
+ end
+
+ -- Mason
+ if ops.mason.enable then
+ local mason_ops = {}
+ if ops.mason.auto_install == true then
+ mason_ops.ensure_installed = mason_servers
+ end
+ local mason_lspconfig = require "mason-lspconfig"
+ mason_lspconfig.setup(mason_ops)
+ end
+
+ -- TODO: implement null ls with options
+ require "pi.lsp.null-ls"
+
+ local servers = {}
+ for server, options in pairs(ops.servers) do
+ table.insert(servers, string.format("%s <%s>", server, options.enable))
+ end
+
+ -- TODO: create an auto command that on write of the configuration, calls again the setup and restart the server if it's up.
+ -- can get the client by name of the file
+
+ vim.api.nvim_create_user_command("AlphaLSP", function()
+ vim.ui.select(servers, { prompt = "LSP Servers" }, function(server)
+ if server == nil then
+ return
+ end
+
+ server = string.match(server, "^(.+) <")
+ local path = string.format("%s/lua/pi/lsp/servers/%s.lua", vim.fn.stdpath "config", server)
+ if vim.fn.filereadable(path) == 0 then
+ local create = vim.fn.confirm("Server Does Not exist. Create new server?", "&Yes\n&No\n&Cancel")
+ if create ~= 1 then
+ return
+ end
+ end
+
+ local uri = vim.uri_from_fname(path)
+ local buffer = vim.uri_to_bufnr(uri)
+
+ vim.api.nvim_win_set_buf(0, buffer)
+ end)
+ end, {})
+ end,
+}