From f642c81295b02946983b9e46356dbc95c2bfe9fb Mon Sep 17 00:00:00 2001 From: Alpha Chen Date: Wed, 28 Dec 2022 13:31:34 -0800 Subject: [PATCH] neovim things --- .config/nvim/fnl/ftplugin/fennel.fnl | 17 ++++ .config/nvim/fnl/init.fnl | 12 ++- .config/nvim/fnl/lsp.fnl | 132 ++++++++++++++++----------- 3 files changed, 104 insertions(+), 57 deletions(-) diff --git a/.config/nvim/fnl/ftplugin/fennel.fnl b/.config/nvim/fnl/ftplugin/fennel.fnl index 769db05..a7be023 100644 --- a/.config/nvim/fnl/ftplugin/fennel.fnl +++ b/.config/nvim/fnl/ftplugin/fennel.fnl @@ -1,5 +1,22 @@ (set vim.bo.formatprg "fnlfmt /dev/stdin") +;; https://github.com/rktjmp/hotpot.nvim/discussions/93#discussioncomment-4362209 +(vim.cmd "iabbrev lambda v:lua.iab_lambda()") + +;; fnlfmt: skip +(fn _G.iab_lambda [] + (let [line (vim.fn.getline :.) + col (vim.fn.col :.) + ;; a b c \lambda + ;; ^ check here (may not exist) + ;; but dont do anything if that under runs the first character + offset (- col (length :lambda) 1)] + (match [(< 0 offset) (string.sub line offset offset)] + ;; replace term codes so the expr actually runs backspace, not inserts the string + [true :\] (vim.api.nvim_replace_termcodes :λ true false true) + [false _] :lambda))) + ; (let [{: nvim_create_autocmd : nvim_command} vim.api] ; (nvim_create_autocmd :BufWritePre ; {:callback #(nvim_command "normal migggqG`i")})) + diff --git a/.config/nvim/fnl/init.fnl b/.config/nvim/fnl/init.fnl index 7d2e286..a178801 100644 --- a/.config/nvim/fnl/init.fnl +++ b/.config/nvim/fnl/init.fnl @@ -30,10 +30,12 @@ (vim.keymap.set :i "\\\\" ":write") ;; highlight -(set vim.o.hlsearch false) -; (vim.keymap.set :n :/ ":nohlsearch") -;; TODO -; au TextYankPost * silent! lua vim.highlight.on_yank() +(set vim.o.hlsearch true) +(vim.keymap.set :n :/ ":nohlsearch") +(let [{: nvim_command : nvim_create_autocmd : nvim_create_augroup} vim.api + au-group (nvim_create_augroup :nvim-hl-on-yank {}) + cb #(vim.highlight.on_yank {:higroup :Search :timeout 250})] + (nvim_create_autocmd :TextYankPost {:callback cb :group au-group})) ;; non-shifted shortcuts for moving the cursor to the start/end of the current line (vim.keymap.set :n :H "^") @@ -125,7 +127,7 @@ ;;; treesitter (let [configs (require :nvim-treesitter.configs) {: setup} configs] - (setup {:ensure_installed [:fennel :hcl :lua :python :ruby :rust :typescript] + (setup {:ensure_installed [:fennel :hcl :lua :python :query :ruby :rust :typescript] :sync_install false :highlight {:enable true :additional_vim_regex_highlighting false} ;; disabling since this is super annoying in Ruby diff --git a/.config/nvim/fnl/lsp.fnl b/.config/nvim/fnl/lsp.fnl index 9d93557..da076df 100644 --- a/.config/nvim/fnl/lsp.fnl +++ b/.config/nvim/fnl/lsp.fnl @@ -30,11 +30,10 @@ :filetypes [:fennel] :root_dir #(lspconfig.util.find_git_ancestor $1) :settings {}}}) - (tset configs :steep - {:default_config {:cmd ["steep langserver"] - :filetypes [:ruby] - :root_dir #(lspconfig.util.find_git_ancestor $1) - :settings {}}})) + (tset configs :steep {:default_config {:cmd ["steep langserver"] + :filetypes [:ruby] + :root_dir #(lspconfig.util.find_git_ancestor $1) + :settings {}}})) (let [{: fennel-ls} lspconfig] (fennel-ls.setup (vim.lsp.protocol.make_client_capabilities))) @@ -87,52 +86,81 @@ (let [{: setup} (. lspconfig lsp)] (setup (or config {:on_attach on-attach})))) -(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 :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 :elmls) - (setup-lsp :fennel-ls) - (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 :rust_analyzer - {:on_attach on-attach - :cmd [:rustup :run :stable :rust-analyzer] - :settings {:rust-analyzer {:checkOnSave {:command :clippy}}}}) - (setup-lsp :tsserver {:on_attach (on-attach-do attach-navic disable-fmt)}) - ; (setup-lsp :ruby_ls) - ; (setup-lsp :typeprof) - ; (setup-lsp :steep) - (setup-lsp :vuels {:on_attach (on-attach-do attach-navic disable-fmt)})) +(local fmt #{:formatCommand $1 :formatStdin true}) +(local lint #{:lintCommand $1 :lintFormats $2 :lintStdin true}) +(local fennel-lint + "fennel --globals vim,hs,spoon --raw-errors $(realpath --relative-to . ${INPUT}) 2>&1") + +(local fennel [(fmt "fnlfmt /dev/stdin") (lint fennel-lint ["%f:%l: %m"])]) +(local eslint + {:lintCommand "eslint -f visualstudio --stdin --stdin-filename ${INPUT}" + :lintIgnoreExitCode true + :lintStdin true + :lintFormats ["%f(%l,%c): %tarning %m" "%f(%l,%c): %rror %m"]}) + +(local prettier (fmt "prettier --stdin-filepath ${INPUT}")) +(local javascript [eslint prettier]) +(local black (fmt "black --quiet -")) +(local flake8 (lint "flake8 --stdin-display-name ${INPUT} -" ["%f:%l:%c: %m"])) +(local isort (fmt "isort --quiet --profile black -")) +(local python [black isort]) + +(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 :elmls) +(setup-lsp :fennel-ls) +(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 :rust_analyzer + {:on_attach on-attach + :cmd [:rustup :run :stable :rust-analyzer] + :settings {:rust-analyzer {:checkOnSave {:command :clippy}}}}) + +(setup-lsp :tsserver {:on_attach (on-attach-do attach-navic disable-fmt)}) +(setup-lsp :vuels {:on_attach (on-attach-do attach-navic disable-fmt)}) + +;; TODO +;; https://github.com/Shopify/ruby-lsp/issues/188#issuecomment-1268932965 +; (local request-diagnostics +; (fn [client buffer] +; (let [{: util : diagnostic} lsp +; params (util.make_text_document_params buffer) +; publish-diagnostics #(diagnostic.on_publish_diagnostics nil +; (vim.tbl_extend :keep +; params +; {:diagnostics $1.items}) +; {:client_id client.id}) +; update-diagnostics #(when (not $1) +; (publish-diagnostics $2)) +; callback #(client.request :textDocument/diagnostic +; {:textDocument params} +; update-diagnostics)] +; (vim.api.nvim_create_autocmd [:BufEnter :BufWritePre :CursorHold] +; {: buffer : callback})))) + +; (fn setup-ruby-ls [] +; (let [] +; (setup-lsp :ruby_ls {:on_attach (on-attach-do request-diagnostics)}))) {: setup-lsp} +