summaryrefslogtreecommitdiffstats
path: root/lua/user/lsp/mason.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/user/lsp/mason.lua')
-rw-r--r--lua/user/lsp/mason.lua63
1 files changed, 63 insertions, 0 deletions
diff --git a/lua/user/lsp/mason.lua b/lua/user/lsp/mason.lua
new file mode 100644
index 0000000..b841d72
--- /dev/null
+++ b/lua/user/lsp/mason.lua
@@ -0,0 +1,63 @@
+local mason_ok, mason = pcall(require, "mason")
+if not mason_ok then
+ print "mason init failed"
+ return
+end
+
+local mason_lspconfig_ok, mason_lspconfig = pcall(require, "mason-lspconfig")
+if not mason_lspconfig_ok then
+ print "mason-lspconfig init failed"
+ return
+end
+
+local lspconfig_ok, lspconfig = pcall(require, "lspconfig")
+if not lspconfig_ok then
+ print "lspconfig init failed"
+ return
+end
+
+require('lspconfig.ui.windows').default_options.border = 'rounded'
+
+local servers = {
+ "clangd",
+ "jdtls",
+ "jsonls",
+ "ltex",
+ "rust_analyzer",
+ "solargraph",
+ "sumneko_lua",
+}
+
+mason.setup({
+ ui = {
+ border = "single",
+ icons = {
+ package_installed = "✓",
+ package_pending = "➜",
+ package_uninstalled = "✗"
+ }
+ }
+})
+
+mason_lspconfig.setup({
+ ensure_installed = servers,
+})
+
+mason_lspconfig.setup_handlers({
+ function(server_name)
+ local opts = {
+ on_attach = require("user.lsp.handlers").on_attach,
+ capabilities = require("user.lsp.handlers").capabilities,
+ falgs = {
+ debounce_text_changes = 5000,
+ },
+ }
+
+ local require_ok, server = pcall(require, "user.lsp.settings." .. server_name)
+ if require_ok then
+ opts = vim.tbl_deep_extend("force", server, opts)
+ end
+
+ lspconfig[server_name].setup(opts)
+ end,
+})