summaryrefslogtreecommitdiff
path: root/fnl/config/lsp/lspconfig.fnl
diff options
context:
space:
mode:
Diffstat (limited to 'fnl/config/lsp/lspconfig.fnl')
-rw-r--r--fnl/config/lsp/lspconfig.fnl40
1 files changed, 40 insertions, 0 deletions
diff --git a/fnl/config/lsp/lspconfig.fnl b/fnl/config/lsp/lspconfig.fnl
new file mode 100644
index 0000000..c9baba7
--- /dev/null
+++ b/fnl/config/lsp/lspconfig.fnl
@@ -0,0 +1,40 @@
+;; Setup of lsps.
+(module config.lsp.lspconfig {autoload {util config.util lsp config.lsp.keymaps}})
+
+(defn on-attach [client bufnr] (if (= client.name :html)
+ (set client.server_capabilities.document_formatting
+ false))
+ (lsp.keymaps bufnr))
+
+(defn capabilities []
+ (let [capabilities (vim.lsp.protocol.make_client_capabilities)]
+ (set capabilities.textDocument.completion.completionItem.snippetSupport
+ true)
+ (let [cmp-nvim-lsp (util.prequire :cmp_nvim_lsp)]
+ (cmp-nvim-lsp.default_capabilities capabilities))))
+
+(defn- handler-opts [] {:on_attach on-attach :capabilities (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- 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)
+ :sumneko_lua (sumneko-lua-opts)
+ :rust_analyzer (rust-opts)
+ _ (handler-opts)))
+
+(let [lspconfig (util.prequire :lspconfig) servers (require :config.lsp.servers)]
+ (each [_ server (ipairs servers)]
+ (let [server-config (. lspconfig server)]
+ (server-config.setup (get-server-opts server)))))