summaryrefslogtreecommitdiff
path: root/dot_config/nvim/fnl/plugins/lsp/init.fnl
blob: 67b2b660cbfefbc150c7b46b06c9fb9a402e66d4 (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
32
33
(import-macros {:mixed-table · : recc} :toast.macros)

(fn gopts [plist]
  {:clangd {}
   :clojure_lsp {:root_dir (plist :project.clj :deps.edn :bb.edn :build.boot :shadow-cljs.edn :.git)}
   :denols {:autostart false
            :root_dir (plist :deno.json :deno.jsonc)}
   :gopls {}
   :ltex {}
   :lua_ls {}
   :texlab {:filetypes [:tex :plaintex :bib :latex]}
   :tsserver {:autostart false
              :root_dir (plist :tsconfig.json :package.json)}
   :zls {}})

(local attach (require :plugins.lsp.attach))
(local caps   (require :plugins.lsp.capabilities))

[(· :neovim/nvim-lspconfig &
    :config (fn [_ opts]
             (each [k v (pairs opts)]
              (set v.on_attach (or attach v.on_attach))
              (when (= :table (type caps))
               (set v.capabilities (or v.capabilities caps)))
              (let [s (. (require :lspconfig) k)
                    c (or v.cmd s.document_config.default_config.cmd)]
               (when (not= 0 (vim.fn.executable (. c 1)))
                (s.setup v)))))
    :opts (fn []
           (let [plist (fn [...]
                        (local p (recc :lspconfig.util :root_pattern ...))
                        #(p $))]
            (gopts plist))))]