nix

configuration files that power my machines
Log | Files | Refs | README | LICENSE

lsp.fnl (1976B)


      1 (local {:nvim_create_augroup create-augroup
      2         :nvim_create_autocmd create-autocmd
      3         :nvim_clear_autocmds clear-autocmds
      4         :nvim_get_current_buf get-current-buf} vim.api)
      5 
      6 (create-augroup :local-lsp-auto-format {:clear true})
      7 
      8 (fn is-array [tbl]
      9   (not (not (. tbl 1))))
     10 
     11 (fn map-vals [func tbl]
     12   (icollect [_ v (ipairs tbl)] (func v)))
     13 
     14 (fn create-auto-format-autocmd [extra-opts]
     15   (let [extra-opts (or extra-opts {})
     16         all-extra-opts (if (is-array extra-opts)
     17                            extra-opts
     18                            [extra-opts])
     19         all-opts (map-vals #(vim.tbl_extend :force
     20                                             {:formatting_options {:timeout_ms 5000}}
     21                                             $1)
     22                            all-extra-opts)
     23         auto-format-callback #(each [_ opts (ipairs all-opts)]
     24                                 (vim.lsp.buf.format opts))]
     25     (clear-autocmds {:event :BufWritePre
     26                      :buffer (get-current-buf)
     27                      :group :local-lsp-auto-format})
     28     (create-autocmd :BufWritePre
     29                     {:buffer (get-current-buf)
     30                      :callback auto-format-callback
     31                      :group :local-lsp-auto-format})
     32     nil))
     33 
     34 (fn auto-format-on-save [filetypes extra-opts]
     35   (let [callback #(create-auto-format-autocmd extra-opts)]
     36     (each [_ filetype (ipairs filetypes)]
     37       (create-autocmd :FileType {:pattern filetype : callback}))))
     38 
     39 (fn config []
     40   (vim.lsp.config :purescriptls
     41                   {:cmd [:pnpx :purescript-language-server :--stdio]})
     42   (let [open-floating-preview vim.lsp.util.open_floating_preview]
     43     (set vim.lsp.util.open_floating_preview
     44          (fn [contents syntax opts ...]
     45            (let [opts (or opts {})]
     46              (set opts.border (or opts.border :rounded))
     47              (open-floating-preview contents syntax opts ...))))))
     48 
     49 (vim.diagnostic.config {:virtual_text true})
     50 
     51 {: auto-format-on-save : config}