about summary refs log tree commit diff
path: root/fnl/nvrc/packs/lspconfig.fnl
blob: 83a4146635cd6c40443ce435b58366293968286f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
(local lsp (require :lspconfig))
(local {: highlight} (require :nvrc.macro.color))
(local {: merge} (require :nvrc.utils))
(local colors (require :nvrc.colors))

(fn on_attach [client bufnr]
  (highlight :DiagnosticError {:fg (. colors :red)})
  (highlight :DiagnosticWarn {:fg (. colors :yellow)})
  (highlight :DiagnosticInformation {:fg (. colors :green)})
  (highlight :DiagnosticHint {:fg (. colors :grey)})
  (if client.resolved_capabilities.document_highlight
      (do
        (highlight :LspReferenceRead {:underline true})
        (highlight :LspReferenceText {:underline true})
        (highlight :LspReferenceWrite {:underline true})
        (vim.api.nvim_exec "augroup lsp_document_highlight
        autocmd! * <buffer>
        autocmd CursorMoved <buffer> lua vim.lsp.buf.clear_references()
        augroup END" false))))

(fn better_root_pattern [patterns except-patterns]
  "match path if one of the given patterns is matched, EXCEPT if one of the except-patterns is matched"
  (fn [path]
    (when (not ((lsp.util.root_pattern except-patterns) path))
      ((lsp.util.root_pattern patterns) path))))

(local default_capabilities (vim.lsp.protocol.make_client_capabilities))

(fn init_lsp [lsp-name ?opts]
  "initialize a language server with defaults"
  (let [merged-opts (merge {: on_attach
                                  :capabilities default_capabilities}
                                 (or ?opts {}))]
    ((. lsp lsp-name :setup) merged-opts)))

(tset vim.lsp.handlers :textDocument/publishDiagnostics
      (vim.lsp.with vim.lsp.diagnostic.on_publish_diagnostics
                    {:update_in_insert false
                     :virtual_text {:prefix "-"}
                     :signs false}))

(init_lsp :ccls)
(init_lsp :hls)
(init_lsp :rust_analyzer)

(vim.cmd "highlight link LspSemantic_type Include")
(vim.cmd "highlight link LspSemantic_function Identifier")
(vim.cmd "highlight link LspSemantic_struct Number")
(vim.cmd "highlight LspSemantic_variable guifg=gray")
(vim.cmd "highlight link LspSemantic_keyword Structure")