summaryrefslogtreecommitdiff
path: root/fnl/config/lsp/lsp-installer.fnl
blob: c08f1d64484edc4b8b98bf0b7c39f115b6914aaa (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
51
52
53
54
55
;; Loads default handlers and specific language settings.
(module config.lsp.lsp-installer {autoload {util util}})

(def- default-servers {:bashls true
                       :clangd true
                       :cssls true
                       :dockerls true
                       :html true
                       :hls true
                       :jsonls true
                       :pyright true
                       :rust_analyzer true
                       :terraformls true
                       :texlab true
                       :tflint true
                       :yamlls true
                       :zk true})

(defn- merge [default-servers installed-servers]
       (let [servers default-servers]
         (each [_ server (ipairs installed-servers)]
           (if (not= (. servers server.name) true)
               (tset servers server.name true)))
         servers))

(def- handler-opts
      (let [handlers (require :config.lsp.handlers)]
        {:on_attach handlers.on-attach :capabilities (handlers.capabilities)}))

(def- jsonls-opts
      (let [jsonls-opts (require :config.lsp.settings.jsonls)]
        (vim.tbl_deep_extend :force jsonls-opts handler-opts)))

(def- sumneko-lua-opts
      (let [sumneko-lua (require :config.lsp.settings.sumneko-lua)]
        (vim.tbl_deep_extend :force sumneko-lua.opts handler-opts)))

(def- pyright-opts
      (let [pyright (require :config.lsp.settings.pyright)]
        (vim.tbl_deep_extend :force pyright.opts handler-opts)))

(defn- get-server-opts [server]
       (match server
         :jsonls jsonls-opts
         :pyright pyright-opts
         :sumneko_lua sumneko-lua-opts
         _ handler-opts))

(let [lsp-installer (util.load-plugin :nvim-lsp-installer)
      lspconfig (util.load-plugin :lspconfig)]
  (let [servers (merge default-servers (lsp-installer.get_installed_servers))]
    (lsp-installer.setup {:ensure_installed servers})
    (each [server _ (pairs servers)]
      (let [server-config (. lspconfig server)]
        (server-config.setup (get-server-opts server))))))