summaryrefslogtreecommitdiff
path: root/fnl/config/lsp/mason-lspconfig.fnl
diff options
context:
space:
mode:
Diffstat (limited to 'fnl/config/lsp/mason-lspconfig.fnl')
-rw-r--r--fnl/config/lsp/mason-lspconfig.fnl56
1 files changed, 56 insertions, 0 deletions
diff --git a/fnl/config/lsp/mason-lspconfig.fnl b/fnl/config/lsp/mason-lspconfig.fnl
new file mode 100644
index 0000000..704761d
--- /dev/null
+++ b/fnl/config/lsp/mason-lspconfig.fnl
@@ -0,0 +1,56 @@
+;; TBD
+(module config.lsp.mason-lspconfig {autoload {: util}})
+
+(def- servers [:bashls
+ :clangd
+ :cssls
+ :dockerls
+ :html
+ :hls
+ :jsonls
+ :pyright
+ :rust_analyzer
+ :taplo
+ :terraformls
+ :texlab
+ :sumneko_lua
+ :tflint
+ :yamlls
+ :zk])
+
+(defn- handler-opts []
+ (let [handlers (require :config.lsp.handlers)]
+ {:on_attach handlers.on-attach :capabilities (handlers.capabilities)}))
+
+(defn- jsonls-opts []
+ (let [jsonls-opts (require :config.lsp.settings.jsonls)]
+ (vim.tbl_deep_extend :force jsonls-opts (handler-opts))))
+
+(defn- sumneko-lua-opts []
+ (let [sumneko-lua (require :config.lsp.settings.sumneko-lua)]
+ (vim.tbl_deep_extend :force sumneko-lua.opts (handler-opts))))
+
+(defn- pyright-opts []
+ (let [pyright (require :config.lsp.settings.pyright)]
+ (vim.tbl_deep_extend :force pyright.opts (handler-opts))))
+
+(defn- rust-opts []
+ (let [rust (require :config.lsp.settings.rust)]
+ (vim.tbl_deep_extend :force rust.opts (handler-opts))))
+
+(defn- get-server-opts [server]
+ (match server
+ :jsonls (jsonls-opts)
+ :pyright (pyright-opts)
+ :sumneko_lua (sumneko-lua-opts)
+ :rust_analyzer (rust-opts)
+ _ (handler-opts)))
+
+(def- opts {:ensure_installed servers :automatic_installation true})
+
+(util.use-config :mason-lspconfig opts)
+
+(let [lspconfig (util.load-plugin :lspconfig)]
+ (each [_ server (ipairs servers)]
+ (let [server-config (. lspconfig server)]
+ (server-config.setup (get-server-opts server)))))