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}