From c33fe4cd136e59f58b4c40078fa3a2e88802ab85 Mon Sep 17 00:00:00 2001 From: Alpha Chen Date: Tue, 11 Oct 2022 14:03:38 -0700 Subject: [PATCH] neovim 0.8+ --- nvim/config/fnl/init.fnl | 2 + nvim/config/fnl/lsp.fnl | 102 +++++++++++++++++++++++---------------- 2 files changed, 63 insertions(+), 41 deletions(-) diff --git a/nvim/config/fnl/init.fnl b/nvim/config/fnl/init.fnl index 9eb6349..055e457 100644 --- a/nvim/config/fnl/init.fnl +++ b/nvim/config/fnl/init.fnl @@ -1,5 +1,7 @@ (vim.cmd "colorscheme paramount") +(set vim.o.cmdheight 0) + (set vim.o.foldlevel 2) (set vim.o.linebreak true) (set vim.o.list true) diff --git a/nvim/config/fnl/lsp.fnl b/nvim/config/fnl/lsp.fnl index fb06656..55353af 100644 --- a/nvim/config/fnl/lsp.fnl +++ b/nvim/config/fnl/lsp.fnl @@ -1,11 +1,5 @@ (local {: lsp} vim) -(fn fmt [formatCommand formatStdin] - {: formatCommand : formatStdin}) - -(fn lint [lintCommand lintFormats lintStdin] - {: lintCommand : lintFormats : lintStdin}) - ;; (lsp.set_log_level :debug) ;; default hover windows to have borders @@ -21,7 +15,7 @@ (vim.keymap.set :n :q vim.diagnostic.setloclist opts)) (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}] (vim.keymap.set :n :gD lsp.buf.declaration bufopts) (vim.keymap.set :n :gd lsp.buf.definition bufopts) @@ -31,46 +25,72 @@ (vim.keymap.set :n :wa lsp.buf.add_workspace_folder bufopts) (vim.keymap.set :n :wr lsp.buf.remove_workspace_folder bufopts) (vim.keymap.set :n :wl - (fn [] - (print (vim.inspect (lsp.buf.list_workspace_folders)))) + #(print (vim.inspect (lsp.buf.list_workspace_folders))) bufopts) (vim.keymap.set :n :D lsp.buf.type_definition bufopts) (vim.keymap.set :n :rn lsp.buf.rename bufopts) (vim.keymap.set :n :ca lsp.buf.code_action bufopts) (vim.keymap.set :n :gr lsp.buf.references bufopts) - (vim.keymap.set :n :lf lsp.buf.formatting bufopts)) - (when (not= client.name :efm) - (let [navic (require :nvim-navic) - {: attach} navic] - (attach client bufnr)))) + (vim.keymap.set :n :lf #(lsp.buf.format {:async true}) bufopts))) + +(fn on-attach-do [...] + (let [fns [...]] ; https://benaiah.me/posts/everything-you-didnt-want-to-know-about-lua-multivals/ + (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)) -(local fennel [(fmt "fnlfmt /dev/stdin" true) - (lint "fennel --globals vim,hs,spoon --raw-errors $(realpath --relative-to . ${INPUT}) 2>&1" - ["%f:%l: %m"] true)]) +(fn disable-fmt [client] + (set client.resolved_capabilities.document_formatting false)) -(local efm-setup - {:on_attach on-attach - :init_options {:documentFormatting true - :hover true - :documentSymbol true - :codeAction true - :completion true} - :settings {:languages {: fennel - :javascript [prettier] - :typescript [prettier] - :typescriptreact [prettier]}} - :filetypes [:fennel :javascript :typescript :typescriptreact]}) +(fn setup-lsp [lsp config] + (let [lspconfig (require :lspconfig) + {: setup} (. lspconfig lsp)] + (setup (or config {:on_attach on-attach})))) -(local tsserver-attach (fn [client bufnr] - (on-attach client bufnr) - ;; use prettier for formatting via efm - (set client.resolved_capabilities.document_formatting - false))) +(let [fmt #{:formatCommand $1 :formatStdin true} + lint #{:lintCommand $1 :lintFormats $2 :lintStdin true} + fennel-lint "fennel --globals vim,hs,spoon --raw-errors $(realpath --relative-to . ${INPUT}) 2>&1" + fennel [(fmt "fnlfmt /dev/stdin") (lint fennel-lint ["%f:%l: %m"])] + 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}))