helm/home/profiles/nvim/config/fnl/conf/lsp.fnl
2024-08-25 23:44:07 -07:00

119 lines
4.1 KiB
Fennel

; (local lspfuzzy (require :lspfuzzy))
(local lspkind (require :lspkind))
(local lspconfig (require :lspconfig))
(local cmp (require :cmp))
(local nvim (require :lib/nvim))
; (local sg (require :sg))
; (local lsputil (require :lspconfig/util))
(tset vim.lsp.handlers
:textDocument/hover
(vim.lsp.with vim.lsp.handlers.hover
{:focusable false :border "rounded"}))
(tset vim.lsp.handlers
:textDocument/signatureHelp
(vim.lsp.with vim.lsp.handlers.signature_help
{:focusable false :border "rounded"}))
(local capabilities (let [cmp_nvim_lsp (require :cmp_nvim_lsp)]
(cmp_nvim_lsp.default_capabilities)))
(local formatting-augroup (nvim.augroup :LspFormatting))
(fn goimports [wait-ms]
(let [params (vim.lsp.util.make_range_params)
result (do
(tset params :context {:only [:source.organizeImports]})
(vim.lsp.buf_request_sync 0 :textDocument/codeAction params wait-ms))]
(each [_ res (pairs (or result {}))]
(each [_ r (pairs (or res.result {}))]
(if r.edit
(vim.lsp.util.apply_workspace_edit r.edit "utf-16")
(vim.lsp.buf.execute_command r.command))))
(vim.lsp.buf.format)))
(fn on-attach [client bufnr]
(let [filetype (vim.api.nvim_buf_get_option 0 "filetype")]
(if (client.supports_method "textDocument/formatting")
(do (nvim.autocmd "BufWritePre"
{:group formatting-augroup
:buffer bufnr
:callback (fn [_] (if (= filetype "go")
(goimports 2000)
(vim.lsp.buf.format {:bufnr bufnr})))})))))
(lspconfig.gopls.setup
{:capabilities capabilities
:codelens {:generate true :gc_details true}
:semanticTokens true
:flags { :debounce_text_changes 200}
:analyses {:unusedparams true
:unusedvariables true
:unusedwrite true
:nilness true
:unusedwrite true
:useany true}
:completeUnimported true
:staticcheck true
:experimentalPostfixCompletions true
:hints {:constantValues true
:functionTypeParameters true
:assignVariablesTypes true
:compositeLiteralTypes true
:compositeLiteralFields true
:parameterNames true
:rangeVariableTypes true}
:on_attach on-attach})
; # local servers = { 'clojure_lsp', 'terraform_lsp', 'zls', 'pyright', 'rust_analyzer', 'tsserver', 'lua_ls', 'nil_ls', 'gopls'}
; # for _, lsp in ipairs(servers) do
; # lspconfig[lsp].setup {}
; # on_attach = function(client, bufnr)
; # format.on_attach(client)
; # navic.attach(client, bufnr)
; # end,
; # capabilities = capabilities,
; #
; # end)
;; Diagnostics Config I don't yet understand
; Set Diagnostics
; local signs = { Error = " ", Warn = " ", Hint = " ", Info = " " }
; for type, icon in pairs(signs) do
; local hl = "DiagnosticSign" .. type
; vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = hl})
; end
; vim.g.diagnostics_active = true
; function _G.toggle_diagnostics()
; if vim.g.diagnostics_active then
; vim.g.diagnostics_active = false
; vim.lsp.diagnostic.clear(0)
; vim.lsp.handlers["textDocument/publishDiagnostics"] = function() end
; else
; vim.g.diagnostics_active = true
; vim.lsp.handlers["textDocument/publishDiagnostics"] = vim.lsp.with(
; vim.lsp.diagnostic.on_publish_diagnostics, {
; virtual_text = true,
; signs = true,
; underline = true,
; update_in_insert = false,
; }
; )
; end
; end
;
; vim.diagnostic.config({
; signs = true,
; update_in_insert = false,
; underline = false,
; severity_sort = true,
; float = {
; focusable = false,
; style = 'minimal',
; border = 'rounded',
; source = 'always',
; },
; })