use built-in nvim diagnostics and lsp for linting
diff --git a/.config/nvim/fnl/init.fnl b/.config/nvim/fnl/init.fnl
index 5414d395..66b08956 100644
--- a/.config/nvim/fnl/init.fnl
+++ b/.config/nvim/fnl/init.fnl
@@ -1,43 +1,35 @@
(vim.cmd "colorscheme paramount")
(set vim.opt.list true)
-(set vim.opt.listchars {:tab "\\u21e5 "
- :trail "\\u2423"
- :extends "\\u21c9"
+
+;; fnlfmt: skip
+(set vim.opt.listchars {:tab "\\u21e5 "
+ :trail "\\u2423"
+ :extends "\\u21c9"
:precedes "\\u21c7"
- :nbsp "\\u00b7"})
+ :nbsp "\\u00b7"})
(set vim.opt.number true)
(set vim.g.mapleader " ")
-; (let [{: keymap} vim
-; nnoremap #(keymap.set :n $1 $2 {:noremap true})
-; inoremap #(keymap.set :i $1 $2 {:noremap true})]
-
-; ; clear hl
-; (nnoremap :<leader>/ ":nohlsearch<cr>")
-
-; ; quick save
-; (nnoremap "\\\\" ":write<cr>")
-; (inoremap "\\\\" "<esc>:write<cr>")
+;; move the cursor to the first non-blank character with H
+(vim.keymap.set :n :H "^" {:noremap true})
-; ; fzf
-; (nnoremap :<leader>b ":Buffers<cr>")
-; (nnoremap :<leader>f ":Files<cr>")
-; (nnoremap :<leader>t ":Tags<cr>"))
+;; quick save
(vim.keymap.set :n "\\\\" ":write<cr>" {:noremap true})
(vim.keymap.set :i "\\\\" "<esc>:write<cr>" {:noremap true})
+;; clear highlight
(vim.keymap.set :n :<leader>/ ":nohlsearch<cr>" {:noremap true})
-;; restore cursor location
-;;
+;;; restore cursor location
+
;; https://github.com/vim/vim/blob/master/runtime/defaults.vim#L108
(let [{: nvim_command : nvim_create_autocmd : nvim_create_augroup} vim.api
au-group (nvim_create_augroup :nvim-startup {})
cb (fn []
- (when (and (>= (vim.fn.line "'\"") 1)
+ (when (and (< 0 (vim.fn.line "'\""))
(<= (vim.fn.line "'\"") (vim.fn.line "$"))
(not (string.find vim.bo.filetype :commit)))
(nvim_command "normal! g`\"")))]
@@ -49,62 +41,74 @@
(nvim_command "filetype plugin indent on")
(nvim_create_autocmd :BufReadPost {:callback cb :group au-group}))
-;; ftplugins in fennel
-;;
+;;; ftplugins in fennel
+
;; https://github.com/rktjmp/hotpot.nvim/discussions/41#discussioncomment-3050564
(let [{: nvim_create_autocmd : nvim_create_augroup} vim.api
au-group (nvim_create_augroup :hotpot-ft {})
cb #(pcall require (.. :ftplugin. (vim.fn.expand :<amatch>)))]
(nvim_create_autocmd :FileType {:callback cb :group au-group}))
-;; ale
-
-(set vim.g.ale_fix_on_save 1)
-(set vim.g.ale_floating_preview 1)
-
-;; fzf
-
-(when (vim.fn.executable :fzf)
- (when (vim.fn.isdirectory :/opt/homebrew/opt/fzf/plugin)
- (vim.opt.rtp:append :/opt/homebrew/opt/fzf))
- (vim.keymap.set :n :<leader>b ":Buffers<cr>" {:noremap true})
- (vim.keymap.set :n :<leader>f ":Files<cr>" {:noremap true})
- (vim.keymap.set :n :<leader>t ":Tags<cr>" {:noremap true})
-
- ; https://coreyja.com/vim-spelling-suggestions-fzf/
- (let [{: nvim_command : nvim_create_user_command} vim.api
- {: expand : spellsuggest} vim.fn
- fzf-run (. vim.fn "fzf#run")
- sink #(nvim_command (.. "normal! \"_ciw" $1))
- fzf-spell #(fzf-run {:source (spellsuggest (expand :<cword>))
- : sink
- :window {:width 0.9 :height 0.6}})]
- (nvim_create_user_command :FzfSpell fzf-spell {})
- (vim.keymap.set :n :z= ":FzfSpell<cr>")))
-
-;; lspconfig
-; (let [opts {:noremap true :silent true}]
-; (vim.keymap.set :n :<leader>e vim.diagnostic.open_float opts)
-; (vim.keymap.set :n "[d" vim.diagnostic.goto_prev opts)
-; (vim.keymap.set :n "]d" vim.diagnostic.goto_next opts)
-; (vim.keymap.set :n :<leader>q vim.diagnostic.setloclist opts))
-
-; (fn on_attach [client bufnr]
-; (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 vim.lsp.buf.declaration bufopts)
-; (vim.keymap.set :n :gd vim.lsp.buf.definition bufopts)
-; (vim.keymap.set :n :K vim.lsp.buf.hover bufopts)
-; (vim.keymap.set :n :gi vim.lsp.buf.implementation bufopts)
-; (vim.keymap.set :n :<C-k> vim.lsp.buf.signature_help bufopts)
-; (vim.keymap.set :n :<leader>wa vim.lsp.buf.add_workspace_folder bufopts)
-; (vim.keymap.set :n :<leader>wr vim.lsp.buf.remove_workspace_folder bufopts)
-; (vim.keymap.set :n :<leader>wl
-; (fn []
-; (print (vim.inspect (vim.lsp.buf.list_workspace_folders))))
-; bufopts)
-; (vim.keymap.set :n :<leader>D vim.lsp.buf.type_definition bufopts)
-; (vim.keymap.set :n :<leader>rn vim.lsp.buf.rename bufopts)
-; (vim.keymap.set :n :<leader>ca vim.lsp.buf.code_action bufopts)
-; (vim.keymap.set :n :gr vim.lsp.buf.references bufopts)
-; (vim.keymap.set :n :<leader>f vim.lsp.buf.formatting bufopts)))
+;; (require :ale)
+(require :fzf)
+
+;;; lint
+
+(let [lint (require :lint)
+ {: linters :linters_by_ft linters-by-ft :try_lint try-lint} lint
+ {:fennel fennel-linter} linters
+ {: nvim_create_autocmd} vim.api]
+ (tset linters-by-ft :fennel [:fennel])
+ (tset fennel-linter :globals [:vim]) ; hack
+ (nvim_create_autocmd :BufWritePost {:callback #(try-lint)}))
+
+;;; lspconfig
+
+;; (vim.lsp.set_log_level :debug)
+
+(let [opts {:noremap true :silent true}]
+ (vim.keymap.set :n :<leader>e vim.diagnostic.open_float opts)
+ (vim.keymap.set :n "[d" vim.diagnostic.goto_prev opts)
+ (vim.keymap.set :n "]d" vim.diagnostic.goto_next opts)
+ (vim.keymap.set :n :<leader>q vim.diagnostic.setloclist opts))
+
+(fn on_attach [client bufnr]
+ (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 vim.lsp.buf.declaration bufopts)
+ (vim.keymap.set :n :gd vim.lsp.buf.definition bufopts)
+ (vim.keymap.set :n :K vim.lsp.buf.hover bufopts)
+ (vim.keymap.set :n :gi vim.lsp.buf.implementation bufopts)
+ (vim.keymap.set :n :<C-k> vim.lsp.buf.signature_help bufopts)
+ (vim.keymap.set :n :<leader>wa vim.lsp.buf.add_workspace_folder bufopts)
+ (vim.keymap.set :n :<leader>wr vim.lsp.buf.remove_workspace_folder bufopts)
+ (vim.keymap.set :n :<leader>wl
+ (fn []
+ (print (vim.inspect (vim.lsp.buf.list_workspace_folders))))
+ bufopts)
+ (vim.keymap.set :n :<leader>D vim.lsp.buf.type_definition bufopts)
+ (vim.keymap.set :n :<leader>rn vim.lsp.buf.rename bufopts)
+ (vim.keymap.set :n :<leader>ca vim.lsp.buf.code_action bufopts)
+ (vim.keymap.set :n :gr vim.lsp.buf.references bufopts)
+ (vim.keymap.set :n :<leader>f vim.lsp.buf.formatting bufopts)))
+
+(let [{: rust_analyzer} (require :lspconfig)]
+ ((. rust_analyzer :setup) {: on_attach
+ :settings {:rust-analyzer {:checkOnSave {:command :clippy}}}}))
+
+;;; netrw
+
+(set vim.g.netrw_fastbrowse 0)
+
+; https://github.com/tpope/vim-vinegar/issues/13
+(set vim.g.netrw_home "~/.nvim_tmp")
+
+;;; generate help files
+
+; Load all plugins now.
+; Plugins need to be added to runtimepath before helptags can be generated.
+(vim.api.nvim_command :packloadall)
+
+; Load all of the helptags now, after plugins have been loaded.
+; All messages and errors will be ignored.
+(vim.api.nvim_command "silent! helptags ALL")
diff --git a/.gitmodules b/.gitmodules
index a982a645..86a9c193 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -165,9 +165,6 @@
[submodule ".local/share/nvim/site/pack/kejadlen/start/surround"]
path = .local/share/nvim/site/pack/kejadlen/start/surround
url = https://github.com/tpope/vim-surround.git
-[submodule ".local/share/nvim/site/pack/kejadlen/start/ale"]
- path = .local/share/nvim/site/pack/kejadlen/start/ale
- url = https://github.com/dense-analysis/ale.git
[submodule ".local/share/nvim/site/pack/kejadlen/start/fzf"]
path = .local/share/nvim/site/pack/kejadlen/start/fzf
url = https://github.com/junegunn/fzf.vim.git
@@ -177,3 +174,6 @@
[submodule ".local/share/nvim/site/pack/kejadlen/start/tabular"]
path = .local/share/nvim/site/pack/kejadlen/start/tabular
url = https://github.com/godlygeek/tabular.git
+[submodule ".local/share/nvim/site/pack/kejadlen/start/lint"]
+ path = .local/share/nvim/site/pack/kejadlen/start/lint
+ url = https://github.com/mfussenegger/nvim-lint.git
diff --git a/.local/share/nvim/site/pack/kejadlen/start/ale b/.local/share/nvim/site/pack/kejadlen/start/ale
deleted file mode 160000
index 39d1a105..00000000
--- a/.local/share/nvim/site/pack/kejadlen/start/ale
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 39d1a1058908396be61579a13e75a272cc527c57
diff --git a/.local/share/nvim/site/pack/kejadlen/start/lint b/.local/share/nvim/site/pack/kejadlen/start/lint
new file mode 160000
index 00000000..5249977a
--- /dev/null
+++ b/.local/share/nvim/site/pack/kejadlen/start/lint
@@ -0,0 +1 @@
+Subproject commit 5249977a585c3c17d94afdc8f0255a689d3a0057