summaryrefslogtreecommitdiff
path: root/dot_config/nvim/fnl/plugins/lsp/attach.fnl
blob: 1f2301592897c78e2fae323ab36cca0c2eaad994 (plain) (blame)
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
(import-macros {: tbl : recc} :toast.macros)
(local {: assoc : map} (require :toast.core))
(local {: insert} (require :toast.table))

(fn [c b]
  (let [lsp vim.lsp
        lbf lsp.buf
        ll  [(tbl "" & :group :+lsp)
             (tbl :w & :group :+workspace)

             (tbl :D lbf.declaration     & :desc "goto declaration")
             (tbl :d lbf.definition      & :desc "goto definition")
             (tbl :k lbf.hover           & :desc "hover")
             (tbl :K lbf.signature_help  & :desc "signature help")
             (tbl :i lbf.implementation  & :desc "goto implementation")
             (tbl :t lbf.type_definition & :desc "goto type definition")
             (tbl :r lbf.rename          & :desc "rename")
             (tbl :c lbf.code_action     & :desc "code action")
             (tbl :R lbf.reference       & :desc "list references")

             (tbl :wa lbf.add_workspace_folder    & :desc "add folder")
             (tbl :wr lbf.remove_workspace_folder & :desc "remove folder")
             (tbl :wl #(print (vim.inspect (lbf.list_workspace_folders))) &
                :desc "list folders")]
        ll (map #(assoc $ 1 (.. :<localleader><localleader> (. $ 1))) ll)]
   (vim.api.nvim_buf_set_option b :omnifunc :v:lua.vim.lsp.omnifunc)
   (recc :which-key :add
         (tbl (insert ll
                      (tbl :<leader>F #(vim.lsp.buf.format {:async true}) &
                         :desc "run format")) &
            :buffer b))))