neovim things
change
commit f642c81295b02946983b9e46356dbc95c2bfe9fb
author Alpha Chen <alpha@kejadlen.dev>
date
parent a48943c9
diff --git a/.config/nvim/fnl/ftplugin/fennel.fnl b/.config/nvim/fnl/ftplugin/fennel.fnl
index 769db05d..a7be0234 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 <buffer> <expr> 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 :<bs>λ 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 7d2e2869..a1788015 100644
--- a/.config/nvim/fnl/init.fnl
+++ b/.config/nvim/fnl/init.fnl
@@ -30,10 +30,12 @@
 (vim.keymap.set :i "\\\\" "<esc>:write<cr>")
 
 ;; highlight
-(set vim.o.hlsearch false)
-; (vim.keymap.set :n :<leader>/ ":nohlsearch<cr>")
-;; TODO
-; au TextYankPost * silent! lua vim.highlight.on_yank()
+(set vim.o.hlsearch true)
+(vim.keymap.set :n :<leader>/ ":nohlsearch<cr>")
+(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 9d93557f..da076dfc 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}
+