neovim 0.8+

pull/2/head
Alpha Chen 2 years ago
parent 35c6a44171
commit c33fe4cd13
Signed by: alpha
SSH Key Fingerprint: SHA256:3fOT8fiYQG/aK9ntivV3Bqtg8AYQ7q4nV6ZgihOA20g

@ -1,5 +1,7 @@
(vim.cmd "colorscheme paramount") (vim.cmd "colorscheme paramount")
(set vim.o.cmdheight 0)
(set vim.o.foldlevel 2) (set vim.o.foldlevel 2)
(set vim.o.linebreak true) (set vim.o.linebreak true)
(set vim.o.list true) (set vim.o.list true)

@ -1,11 +1,5 @@
(local {: lsp} vim) (local {: lsp} vim)
(fn fmt [formatCommand formatStdin]
{: formatCommand : formatStdin})
(fn lint [lintCommand lintFormats lintStdin]
{: lintCommand : lintFormats : lintStdin})
;; (lsp.set_log_level :debug) ;; (lsp.set_log_level :debug)
;; default hover windows to have borders ;; default hover windows to have borders
@ -21,7 +15,7 @@
(vim.keymap.set :n :<leader>q vim.diagnostic.setloclist opts)) (vim.keymap.set :n :<leader>q vim.diagnostic.setloclist opts))
(fn on-attach [client bufnr] (fn on-attach [client bufnr]
(vim.api.nvim_buf_set_option bufnr :omnifunc "v:lua.lsp.omnifunc") (vim.api.nvim_buf_set_option bufnr :omnifunc "v:lua.vim.lsp.omnifunc")
(let [bufopts {:noremap true :silent true :buffer bufnr}] (let [bufopts {:noremap true :silent true :buffer bufnr}]
(vim.keymap.set :n :gD lsp.buf.declaration bufopts) (vim.keymap.set :n :gD lsp.buf.declaration bufopts)
(vim.keymap.set :n :gd lsp.buf.definition bufopts) (vim.keymap.set :n :gd lsp.buf.definition bufopts)
@ -31,46 +25,72 @@
(vim.keymap.set :n :<leader>wa lsp.buf.add_workspace_folder bufopts) (vim.keymap.set :n :<leader>wa lsp.buf.add_workspace_folder bufopts)
(vim.keymap.set :n :<leader>wr lsp.buf.remove_workspace_folder bufopts) (vim.keymap.set :n :<leader>wr lsp.buf.remove_workspace_folder bufopts)
(vim.keymap.set :n :<leader>wl (vim.keymap.set :n :<leader>wl
(fn [] #(print (vim.inspect (lsp.buf.list_workspace_folders)))
(print (vim.inspect (lsp.buf.list_workspace_folders))))
bufopts) bufopts)
(vim.keymap.set :n :<leader>D lsp.buf.type_definition bufopts) (vim.keymap.set :n :<leader>D lsp.buf.type_definition bufopts)
(vim.keymap.set :n :<leader>rn lsp.buf.rename bufopts) (vim.keymap.set :n :<leader>rn lsp.buf.rename bufopts)
(vim.keymap.set :n :<leader>ca lsp.buf.code_action bufopts) (vim.keymap.set :n :<leader>ca lsp.buf.code_action bufopts)
(vim.keymap.set :n :gr lsp.buf.references bufopts) (vim.keymap.set :n :gr lsp.buf.references bufopts)
(vim.keymap.set :n :<leader>lf lsp.buf.formatting bufopts)) (vim.keymap.set :n :<leader>lf #(lsp.buf.format {:async true}) bufopts)))
(when (not= client.name :efm)
(let [navic (require :nvim-navic) (fn on-attach-do [...]
{: attach} navic] (let [fns [...]] ; https://benaiah.me/posts/everything-you-didnt-want-to-know-about-lua-multivals/
(attach client bufnr)))) (fn [client bufnr]
(on-attach client bufnr)
(each [_ f (ipairs fns)]
(f client bufnr)))))
(fn attach-navic [client bufnr]
((. (require :nvim-navic) :attach) client bufnr))
(local prettier (fmt "prettier --stdin-filepath ${INPUT}" true)) (fn disable-fmt [client]
(local fennel [(fmt "fnlfmt /dev/stdin" true) (set client.resolved_capabilities.document_formatting false))
(lint "fennel --globals vim,hs,spoon --raw-errors $(realpath --relative-to . ${INPUT}) 2>&1"
["%f:%l: %m"] true)])
(local efm-setup (fn setup-lsp [lsp config]
{:on_attach on-attach (let [lspconfig (require :lspconfig)
:init_options {:documentFormatting true {: setup} (. lspconfig lsp)]
:hover true (setup (or config {:on_attach on-attach}))))
:documentSymbol true
:codeAction true
:completion true}
:settings {:languages {: fennel
:javascript [prettier]
:typescript [prettier]
:typescriptreact [prettier]}}
:filetypes [:fennel :javascript :typescript :typescriptreact]})
(local tsserver-attach (fn [client bufnr] (let [fmt #{:formatCommand $1 :formatStdin true}
(on-attach client bufnr) lint #{:lintCommand $1 :lintFormats $2 :lintStdin true}
;; use prettier for formatting via efm fennel-lint "fennel --globals vim,hs,spoon --raw-errors $(realpath --relative-to . ${INPUT}) 2>&1"
(set client.resolved_capabilities.document_formatting fennel [(fmt "fnlfmt /dev/stdin") (lint fennel-lint ["%f:%l: %m"])]
false))) eslint {:lintCommand "eslint -f visualstudio --stdin --stdin-filename ${INPUT}"
:lintIgnoreExitCode true
:lintStdin true
:lintFormats ["%f(%l,%c): %tarning %m" "%f(%l,%c): %rror %m"]}
prettier (fmt "prettier --stdin-filepath ${INPUT}")
javascript [eslint prettier]
black (fmt "black --quiet -")
; flake8 (lint "flake8 --stdin-display-name ${INPUT} -" ["%f:%l:%c: %m"])
isort (fmt "isort --quiet --profile black -")
python [black isort]]
(setup-lsp :pylsp {:on_attach (on-attach-do attach-navic disable-fmt)})
(setup-lsp :pyright
{:on_attach on-attach
:settings {:python {:analysis {:autoImportCompletions true}}}})
(setup-lsp :typeprof)
(setup-lsp :vuels {:on_attach (on-attach-do attach-navic disable-fmt)})
(setup-lsp :efm {:on_attach on-attach
:init_options {:documentFormatting true
:hover true
:documentSymbol true
:codeAction true
:completion true}
:settings {:languages {: fennel
: javascript
: python
:typescript javascript
:typescriptreact javascript
:vue [prettier]}}
:filetypes [:fennel
:javascript
:typescript
:python
:typescriptreact
:vue]})
(setup-lsp :tsserver {:on_attach (on-attach-do attach-navic disable-fmt)})
(setup-lsp :rust_analyzer
{:on_attach on-attach
:settings {:rust-analyzer {:checkOnSave {:command :clippy}}}}))
(let [{: efm : rust_analyzer : tsserver : typeprof} (require :lspconfig)]
(efm.setup efm-setup)
(rust_analyzer.setup {:on_attach on-attach
:settings {:rust-analyzer {:checkOnSave {:command :clippy}}}})
(tsserver.setup {:on_attach tsserver-attach})
(typeprof.setup {:on_attach on-attach}))

Loading…
Cancel
Save