diff options
Diffstat (limited to 'fnl/config/lsp')
-rw-r--r-- | fnl/config/lsp/handlers.fnl | 61 | ||||
-rw-r--r-- | fnl/config/lsp/init.fnl | 7 | ||||
-rw-r--r-- | fnl/config/lsp/lsp-installer.fnl | 22 | ||||
-rw-r--r-- | fnl/config/lsp/null-ls.fnl | 26 | ||||
-rw-r--r-- | fnl/config/lsp/settings/jsonls.fnl | 12 | ||||
-rw-r--r-- | fnl/config/lsp/settings/pyright.fnl | 4 | ||||
-rw-r--r-- | fnl/config/lsp/settings/sumneko-lua.fnl | 23 |
7 files changed, 155 insertions, 0 deletions
diff --git a/fnl/config/lsp/handlers.fnl b/fnl/config/lsp/handlers.fnl new file mode 100644 index 0000000..1e3785b --- /dev/null +++ b/fnl/config/lsp/handlers.fnl @@ -0,0 +1,61 @@ +(module config.lsp.handlers {autoload {util util nvim aniseed.nvim}}) + +(def- signs [{:name :DiagnosticSignError :text ""} + {:name :DiagnosticSignWarn :text ""} + {:name :DiagnosticSignHint :text ""} + {:name :DiagnosticSignInfo :text ""}]) + +(defn- apply-signs [] (each [_ sign (ipairs signs)] + (vim.fn.sign_define sign.name + {:texthl sign.name + :text sign.text + :numhl ""}))) + +(def- config {:virtual_text false + :signs {:active signs} + :update_in_insert true + :underline true + :severity_sort true + :float {:focusable false + :style :minimal + :border :rounded + :source :always + :header "" + :prefix ""}}) + +(defn setup [] (apply-signs) (vim.diagnostic.config config) + (set vim.lsp.handlers.textDocument/hover + (vim.lsp.with {:border :rounded})) + (set vim.lsp.handlers.textDocument/signatureHelp + (vim.lsp.with vim.lsp.handlers.signature_help {:border :rounded}))) + +(defn- lsp-keymaps [bufnr] + (let [opts {:noremap true :silent true}] + (nvim.buf_set_keymap bufnr :n :gD + "<cmd>lua vim.lsp.buf.declaration()<CR>" opts) + (nvim.buf_set_keymap bufnr :n :gd + "<cmd>lua vim.lsp.buf.definition()<CR>" opts) + (nvim.buf_set_keymap bufnr :n :K "<cmd>lua vim.lsp.buf.hover()<CR>" + opts) + (nvim.buf_set_keymap bufnr :n :gI + "<cmd>lua vim.lsp.buf.implementation()<CR>" opts) + (nvim.buf_set_keymap bufnr :n :gr + "<cmd>lua vim.lsp.buf.references()<CR>" opts) + (nvim.buf_set_keymap bufnr :n :gl + "<cmd>lua vim.diagnostic.open_float()<CR>" opts) + (nvim.buf_set_keymap bufnr :n :<leader>q + "<cmd>lua vim.diagnostic.setloclist()<CR>" opts))) + +(defn on-attach [client bufnr] (if (= client.name :html) + (set client.resolved_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.load-plugin :cmp_nvim_lsp)] + (cmp-nvim-lsp.update_capabilities capabilities)) + capabilities)) + +(setup) diff --git a/fnl/config/lsp/init.fnl b/fnl/config/lsp/init.fnl new file mode 100644 index 0000000..c4a461d --- /dev/null +++ b/fnl/config/lsp/init.fnl @@ -0,0 +1,7 @@ +;; Loads the LSP module. +(module config.lsp.init {autoload {util util}}) + +(let [_ (util.load-plugin :lspconfig)] + (require :config.lsp.lsp-installer) + (require :config.lsp.handlers) + (require :config.lsp.null-ls)) diff --git a/fnl/config/lsp/lsp-installer.fnl b/fnl/config/lsp/lsp-installer.fnl new file mode 100644 index 0000000..72bef8e --- /dev/null +++ b/fnl/config/lsp/lsp-installer.fnl @@ -0,0 +1,22 @@ +;; LSP installer. +(module config.lsp.lsp-installer {autoload {util util}}) + +(def- opts (let [handlers (require :config.lsp.handlers)] + {"on_attach:" handlers.on_attach + :capabilities handlers.capabilities})) + +(defn- get-server-opts [server] + (when (= server.name :jsonls) + (let [jsonls-opts (require :config.lsp.settings.jsonls)] + (vim.tbl_deep_extend :force jsonls-opts opts))) + (when (= server.name :sumneko_lua) + (let [sumneko-lua (require :config.lsp.settings.sumneko-lua)] + (vim.tbl_deep_extend :force sumneko-lua.opts opts))) + (when (= server.name :pyright) + (let [pyright (require :config.lsp.settings.pyright)] + (vim.tbl_deep_extend :force pyright.opts opts))) opts) + +(let [lsp-installer (util.load-plugin :nvim-lsp-installer)] + (lsp-installer.on_server_ready (fn [server] + (let [opts (get-server-opts server)] + (server:setup opts))))) diff --git a/fnl/config/lsp/null-ls.fnl b/fnl/config/lsp/null-ls.fnl new file mode 100644 index 0000000..8a95ba9 --- /dev/null +++ b/fnl/config/lsp/null-ls.fnl @@ -0,0 +1,26 @@ +;; Adds LSP diagnostics and formatting. +(module config.lsp.null-ls {autoload {util util}}) + +(let [null-ls (util.load-plugin :null-ls)] + (let [formatting null-ls.builtins.formatting + diagnostics null-ls.builtins.diagnostics] + (null-ls.setup {:debug false + :sources [diagnostics.flake8 + diagnostics.golangci_lint + diagnostics.jsonlint + diagnostics.shellcheck + diagnostics.yamllint + (formatting.black.with {:extra_args [:--fast]}) + formatting.erlfmt + formatting.fourmolu + formatting.gofmt + formatting.goimports + formatting.nixfmt + (formatting.prettier.with {:extra_args [:--no-semi + :--single-quote + :--jsx-single-quote]}) + formatting.rustfmt + formatting.shfmt + formatting.sqlformat + formatting.stylua + formatting.terraform_fmt]}))) diff --git a/fnl/config/lsp/settings/jsonls.fnl b/fnl/config/lsp/settings/jsonls.fnl new file mode 100644 index 0000000..73e8975 --- /dev/null +++ b/fnl/config/lsp/settings/jsonls.fnl @@ -0,0 +1,12 @@ +;; Json schema store catalog language server. +(module config.lsp.settings.jsonls {autoload {util util}}) + +(let [schemastore (util.load-plugin :schemastore)] + (schemastore.setup {:init_options {:providerFormatter false} + :settings {:json {:schemas (schemastore.json.schemas)}} + :setup {:commands {:Format [(fn [] + (vim.lsp.buf.range_formatting [] + [0 + 0] + [(vim.fn.line "$" + 0)]))]}}})) diff --git a/fnl/config/lsp/settings/pyright.fnl b/fnl/config/lsp/settings/pyright.fnl new file mode 100644 index 0000000..639ecff --- /dev/null +++ b/fnl/config/lsp/settings/pyright.fnl @@ -0,0 +1,4 @@ +;; Config for pyright language server. +(module config.lsp.settings.pyright) + +(def opts {:settings {:python {:analysis {:typeCheckingMode :off}}}}) diff --git a/fnl/config/lsp/settings/sumneko-lua.fnl b/fnl/config/lsp/settings/sumneko-lua.fnl new file mode 100644 index 0000000..90c8807 --- /dev/null +++ b/fnl/config/lsp/settings/sumneko-lua.fnl @@ -0,0 +1,23 @@ +;; Config for a Lua language server. +(module config.lsp.settings.sumneko-lua) + +(def- workspace + {:library {(vim.fn.expand :$VIMRUNTIME/lua) true + (vim.fn.expand :$VIMRUNTIME/lua/vim/lsp) true}}) + +(def- diagnostics {:globals [:vim + :map + :filter + :range + :reduce + :head + :tail + :nth + :use + :describe + :it + :dump]}) + +(def- runtime {:version :LuaJIT :path (vim.split package.path ";")}) + +(def opts {:settings {:Lua {: diagnostics : workspace}}}) |