1
0
Fork 0
dotfiles/home/config/nvim/plugins/lsp.fnl

135 lines
7.3 KiB
Plaintext
Raw Normal View History

2022-04-05 19:57:44 +00:00
(let [lsp (require :lspconfig)
2023-10-31 20:24:26 +00:00
cmp (require :cmp_nvim_lsp)
2023-11-28 16:09:38 +00:00
schemastore (require :schemastore)
navic (require :nvim-navic)
diagnostic (require :nifoc.diagnostic)
2022-11-27 16:12:49 +00:00
augroup (vim.api.nvim_create_augroup :NifocLsp {:clear true})
2023-11-29 19:46:11 +00:00
aucmd vim.api.nvim_create_autocmd
ns (vim.api.nvim_create_namespace :nifoc_lsp_float)]
2023-06-26 11:07:19 +00:00
(fn setup-inlay-hint-toggle [bufnr]
(aucmd :InsertEnter {:callback #(vim.lsp.inlay_hint.enable false {: bufnr})
2023-06-26 11:07:19 +00:00
:buffer bufnr
:group augroup})
(aucmd :InsertLeave {:callback #(vim.lsp.inlay_hint.enable true {: bufnr})
2023-06-26 11:07:19 +00:00
:buffer bufnr
:group augroup}))
2022-11-27 16:12:49 +00:00
;; Attach
(aucmd :LspAttach {:callback (fn [args]
(let [client (vim.lsp.get_client_by_id args.data.client_id)
bufnr args.buf]
2024-04-10 13:44:20 +00:00
(when (client.supports_method :textDocument/documentSymbol
{: bufnr})
2022-11-27 16:12:49 +00:00
(navic.attach client bufnr))
2024-04-10 13:44:20 +00:00
(when (client.supports_method :textDocument/inlayHint
{: bufnr})
(vim.lsp.inlay_hint.enable true {: bufnr})
2023-06-26 11:07:19 +00:00
(setup-inlay-hint-toggle bufnr))
2023-10-14 17:55:02 +00:00
(diagnostic.maybe-enable-lsp client bufnr)))
2022-11-27 16:12:49 +00:00
:group augroup
:desc "Automatic LSP setup"})
2022-04-05 19:57:44 +00:00
;; Servers
2023-09-11 22:05:25 +00:00
(vim.lsp.set_log_level :OFF)
2023-11-21 21:02:44 +00:00
(let [capabilities (vim.tbl_deep_extend :force
(vim.lsp.protocol.make_client_capabilities)
(cmp.default_capabilities))
2023-11-20 20:59:54 +00:00
handlers {:textDocument/hover (vim.lsp.with vim.lsp.handlers.hover
{:border :rounded})
:textDocument/signatureHelp (vim.lsp.with vim.lsp.handlers.signature_help
{:border :rounded})}
2023-10-25 13:58:46 +00:00
flags {:allow_incremental_sync true :debounce_text_changes 700}
2023-11-20 20:59:54 +00:00
default-config {: capabilities : handlers : flags}
2022-04-05 19:57:44 +00:00
default-servers [:bashls
:cssls
:dockerls
:erlangls
2023-02-12 21:13:10 +00:00
:fennel_ls
2022-04-05 19:57:44 +00:00
:html
2022-11-27 16:12:49 +00:00
:jsonls
2024-06-25 14:57:10 +00:00
:marksman
2022-05-04 13:03:51 +00:00
:svelte
2023-11-28 16:09:38 +00:00
:taplo]]
2022-04-05 19:57:44 +00:00
;; Default
(each [_ name (pairs default-servers)]
((. lsp name :setup) default-config))
;; Custom
2023-11-18 12:45:55 +00:00
(when (= (vim.fn.executable :elixir-ls) 1)
(lsp.elixirls.setup (->> {:cmd [:elixir-ls]}
(vim.tbl_extend :force default-config))))
2023-11-28 16:09:38 +00:00
(lsp.jsonls.setup (->> {:settings {:json {:schemas (schemastore.json.schemas)
:validate {:enable true}}}}
(vim.tbl_extend :force default-config)))
2023-11-18 12:45:55 +00:00
(when (= (vim.fn.executable :lexical) 1)
(lsp.lexical.setup (->> {:cmd [:lexical :start]}
(vim.tbl_extend :force default-config))))
2023-11-28 16:09:38 +00:00
(when (= (vim.fn.executable :lua-language-server) 1)
(lsp.lua_ls.setup (->> {:cmd [:lua-language-server]
:root_dir (or (lsp.util.root_pattern :init.vim
:init.lua
:.git)
(vim.loop.os_homedir))
:settings {:Lua {:runtime {:version :LuaJIT
:path (vim.split package.path
";")}
:diagnostics {:globals [:vim]}
:telemetry {:enable false}}}}
(vim.tbl_extend :force default-config))))
(when (= (vim.fn.executable :nil) 1)
(lsp.nil_ls.setup (->> {:settings {:nil {:formatting {:command [:nixpkgs-fmt]}}}}
(vim.tbl_extend :force default-config))))
(when (= (vim.fn.executable :nixd) 1)
(lsp.nixd.setup (->> {:settings {:formatting {:command [:nixpkgs-fmt]}}}
(vim.tbl_extend :force default-config))))
2023-06-26 11:07:19 +00:00
(let [inlay-hints {:includeInlayParameterNameHints :all
:includeInlayParameterNameHintsWhenArgumentMatchesName false
:includeInlayFunctionParameterTypeHints true
:includeInlayVariableTypeHints true
:includeInlayVariableTypeHintsWhenTypeMatchesName false
:includeInlayPropertyDeclarationTypeHints true
:includeInlayFunctionLikeReturnTypeHints true
:includeInlayEnumMemberValueHints true}]
2023-11-27 12:45:25 +00:00
(lsp.tsserver.setup (->> {:cmd [:typescript-language-server :--stdio]
2023-06-26 11:07:19 +00:00
:settings {:typescript {:inlayHints inlay-hints}
:javascript {:inlayHints inlay-hints}}}
(vim.tbl_extend :force default-config))))
2022-04-05 19:57:44 +00:00
(lsp.solargraph.setup (->> {:settings {:solargraph {:diagnostics true}}}
(vim.tbl_extend :force default-config)))
2023-11-28 16:09:38 +00:00
(lsp.yamlls.setup (->> {:settings {:yaml {:schemaStore {:enable false
:url ""}
:schemas (schemastore.yaml.schemas)}}}
2023-11-29 19:46:11 +00:00
(vim.tbl_extend :force default-config))))
;; Hacks
(fn add-inline-highlights [bufnr]
(let [lines (vim.api.nvim_buf_get_lines bufnr 0 -1 false)
mapping {"@%S+" "@parameter"
"^%s*(Parameters:)" "@text.title"
"^%s*(Return:)" "@text.title"
"^%s*(See also:)" "@text.title"
"{%S-}" "@parameter"
"|%S-|" "@text.reference"}]
(each [l line (ipairs lines)]
(each [pattern hl_group (pairs mapping)]
(var from 1)
(while from
(var to nil)
(set (from to) (line:find pattern from))
(when from
(vim.api.nvim_buf_set_extmark bufnr ns (- l 1) (- from 1)
{:end_col to : hl_group}))
(set from (if to (+ to 1) nil)))))))
;; https://github.com/MariaSolOs/dotfiles/blob/b4516aa30c2912011a7b9c9857f01dee1ba5b57f/.config/nvim/lua/lsp.lua#L260C1-L260C1
(set vim.lsp.util.stylize_markdown
(fn [bufnr raw-contents opts]
(var contents raw-contents)
(set contents
(vim.lsp.util._normalize_markdown contents
{:width (vim.lsp.util._make_floating_popup_size contents
opts)}))
(tset vim :bo bufnr :filetype :markdown)
(vim.treesitter.start bufnr)
(vim.api.nvim_buf_set_lines bufnr 0 -1 false contents)
(add-inline-highlights bufnr)
contents)))