diff --git a/nvim/.config/nvim/fnl/dotfiles/plugin/lspconfig.fnl b/nvim/.config/nvim/fnl/dotfiles/plugin/lspconfig.fnl index 3d16180..486e0f4 100644 --- a/nvim/.config/nvim/fnl/dotfiles/plugin/lspconfig.fnl +++ b/nvim/.config/nvim/fnl/dotfiles/plugin/lspconfig.fnl @@ -1,178 +1,156 @@ (module dotfiles.plugin.lspconfig - {autoload - {a aniseed.core - u dotfiles.util - nvim aniseed.nvim - nu aniseed.nvim.util}}) + {autoload {a aniseed.core + u dotfiles.util + nvim aniseed.nvim + nu aniseed.nvim.util}}) -(defn bufmap [mode from to] - (u.noremap mode from to {:local? true})) +(defn bufmap [mode from to] (u.noremap mode from to {:local? true})) -(defn nbufmap [from to] - (bufmap :n from to)) - -(defn xbufmap [from to] - (bufmap :x from to)) +(defn nbufmap [from to] (bufmap :n from to)) +(defn xbufmap [from to] (bufmap :x from to)) (defn define-sign [level sign] - (let [sign-level (.. "DiagnosticSign" level)] - (nvim.fn.sign_define sign-level - {:texthl sign-level - :text sign - :numhl sign-level}))) + (let [sign-level (.. :DiagnosticSign level)] + (nvim.fn.sign_define sign-level + {:texthl sign-level :text sign :numhl sign-level}))) ; (define-sign :Error "☢️") ; (define-sign :Warn "⚠️") ; (define-sign :SignHint "🔎") ; (define-sign :Info "ℹ️") -(define-sign :Error "X") -(define-sign :Warn "!") +(define-sign :Error :X) +(define-sign :Warn "!") (define-sign :SignHint "?") -(define-sign :Info "i") +(define-sign :Info :i) (def core-nmappings - { - :gd "lua vim.lsp.buf.definition()" - :gD "lua vim.lsp.buf.declaration()" - :gi "lua vim.lsp.buf.implementation()" - :gr "lua vim.lsp.buf.references()" - :K "lua vim.lsp.buf.hover()" - "[g" "lua vim.diagnostic.goto_prev()" - "]g" "lua vim.diagnostic.goto_next()" - : "lua vim.lsp.buf.signature_help()" - :ca "lua vim.lsp.buf.code_action()" - :cl "lua vim.lsp.codelens.run()" - :ic "lua vim.lsp.buf.incoming_calls()" - ;; TODO: think of new mapping; conficts with org mode - ;; :oc "lua vim.lsp.buf.outgoing_calls()" - :sld "lua vim.diagnostic.open_float(nil, {source = 'always'})" - :rn "lua vim.lsp.buf.rename()" - :fa "lua vim.lsp.buf.formatting_sync()" - }) + {:gd "lua vim.lsp.buf.definition()" + :gD "lua vim.lsp.buf.declaration()" + :gi "lua vim.lsp.buf.implementation()" + :gr "lua vim.lsp.buf.references()" + :K "lua vim.lsp.buf.hover()" + "[g" "lua vim.diagnostic.goto_prev()" + "]g" "lua vim.diagnostic.goto_next()" + : "lua vim.lsp.buf.signature_help()" + :ca "lua vim.lsp.buf.code_action()" + :cl "lua vim.lsp.codelens.run()" + :ic "lua vim.lsp.buf.incoming_calls()" + ;; TODO: think of new mapping; conficts with org mode + ;; :oc "lua vim.lsp.buf.outgoing_calls()" + :sld "lua vim.diagnostic.open_float(nil, {source = 'always'})" + :rn "lua vim.lsp.buf.rename()" + :fa "lua vim.lsp.buf.format()"}) (def client-nmappings - {:clojure_lsp - { - :cn "call LspExecuteCommand('clean-ns')" - :ref "call LspExecuteCommand('extract-function', input('Function name: '))" - :id "call LspExecuteCommand('inline-symbol')" - :il "call LspExecuteCommand('introduce-let', input('Binding name: '))" - :m2l "call LspExecuteCommand('move-to-let', input('Binding name: '))" - } - }) - + {:clojure_lsp {:cn "call LspExecuteCommand('clean-ns')" + :ref "call LspExecuteCommand('extract-function', input('Function name: '))" + :id "call LspExecuteCommand('inline-symbol')" + :il "call LspExecuteCommand('introduce-let', input('Binding name: '))" + :m2l "call LspExecuteCommand('move-to-let', input('Binding name: '))"}}) (def client-command-lnmappings - {:clojure_lsp - {:ai [:add-import-to-namespace ["input('Namespace name: ')"]] - :am [:add-missing-libspec []] - :as [:add-require-suggestion ["input('Namespace name: ')" "input('Namespace as: ')" "input('Namespace name: ')"]] - :cc [:cycle-coll []] - :cn [:clean-ns []] - :cp [:cycle-privacy []] - :ct [:create-test []] - :df [:demote-fn []] - :db [:drag-backward []] - :df [:drag-forward []] - :dk [:destructure-keys []] - :ed [:extract-to-def ["input('Definition name: ')"]] - :ef [:extract-function ["input('Function name: ')"]] - :el [:expand-let []] - :fe [:create-function []] - :il [:introduce-let ["input('Binding name: ')"]] - :is [:inline-symbol []] - :ma [:resolve-macro-as []] - :mf [:move-form ["input('File name: ')"]] - :ml [:move-to-let ["input('Binding name: ')"]] - :pf [:promote-fn ["input('Function name: ')"]] - :sc [:change-collection ["input('Collection type: ')"]] - :sm [:sort-map []] - :tf [:thread-first-all []] - :tF [:thread-first []] - :tl [:thread-last-all []] - :tL [:thread-last []] - :ua [:unwind-all []] - :uw [:unwind-thread []] - } - }) - + {:clojure_lsp {:ai [:add-import-to-namespace + ["input('Namespace name: ')"]] + :am [:add-missing-libspec []] + :as [:add-require-suggestion + ["input('Namespace name: ')" + "input('Namespace as: ')" + "input('Namespace name: ')"]] + :cc [:cycle-coll []] + :cn [:clean-ns []] + :cp [:cycle-privacy []] + :ct [:create-test []] + :df [:drag-forward []] + :db [:drag-backward []] + :df [:drag-forward []] + :dk [:destructure-keys []] + :ed [:extract-to-def ["input('Definition name: ')"]] + :ef [:extract-function ["input('Function name: ')"]] + :el [:expand-let []] + :fe [:create-function []] + :il [:introduce-let ["input('Binding name: ')"]] + :is [:inline-symbol []] + :ma [:resolve-macro-as []] + :mf [:move-form ["input('File name: ')"]] + :ml [:move-to-let ["input('Binding name: ')"]] + :pf [:promote-fn ["input('Function name: ')"]] + :sc [:change-collection ["input('Collection type: ')"]] + :sm [:sort-map []] + :tf [:thread-first-all []] + :tF [:thread-first []] + :tl [:thread-last-all []] + :tL [:thread-last []] + :ua [:unwind-all []] + :uw [:unwind-thread []]}}) (defn bind-client-mappings [client] - (let [client-name (a.get client :name) - mappings (a.get client-nmappings client-name) - command-lnmappings (a.get client-command-lnmappings client-name)] - (when mappings - (each [mapping cmd (pairs mappings)] - (nbufmap mapping cmd))) - (when command-lnmappings - (each [lnmapping command-mapping (pairs command-lnmappings)] - (let [lsp-cmd (a.first command-mapping) - opts-str (accumulate [s "" - i opt (ipairs (a.second command-mapping))] - (.. s ", " opt)) - mapping (.. : lnmapping) - cmd (.. "call LspExecuteCommand('" lsp-cmd "'" opts-str ")")] - (nbufmap mapping cmd)))))) + (let [client-name (a.get client :name) + mappings (a.get client-nmappings client-name) + command-lnmappings (a.get client-command-lnmappings client-name)] + (when mappings + (each [mapping cmd (pairs mappings)] + (nbufmap mapping cmd))) + (when command-lnmappings + (each [lnmapping command-mapping (pairs command-lnmappings)] + (let [lsp-cmd (a.first command-mapping) + opts-str (accumulate [s "" i opt (ipairs (a.second command-mapping))] + (.. s ", " opt)) + mapping (.. : lnmapping) + cmd (.. "call LspExecuteCommand('" lsp-cmd "'" opts-str ")")] + (nbufmap mapping cmd)))))) (defn on_attach [client bufnr] - (each [mapping cmd (pairs core-nmappings)] - (nbufmap mapping cmd)) - - ; x mode mappings - (xbufmap :fa "lua vim.lsp.buf.formatting_sync()") - -; -- buf_set_keymap('n', 'gs', 'lua vim.lsp.buf.document_symbol()', opts) -; -- buf_set_keymap('n', 'gS', 'lua vim.lsp.buf.workspace_symbol()', opts) -; -- buf_set_keymap('n', 'gt', 'lua vim.lsp.buf.type_definition()', opts) -; -- buf_set_keymap('n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) -; -- buf_set_keymap('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) -; -- buf_set_keymap('n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) -; -- buf_set_keymap('n', 'q', 'lua vim.lsp.diagnostic.set_loclist()', opts) -; -- buf_set_keymap('n', 'ic', "lua vim.lsp.buf.incoming_calls()", opts) -; -- buf_set_keymap('x', 'ic', "lua vim.lsp.buf.incoming_calls()", opts) - - (nvim.buf_set_option 0 :omnifunc "v:lua.vim.lsp.omnifunc") - - (bind-client-mappings client) - (nvim.ex.autocmd :BufWritePre : :lua "vim.lsp.buf.formatting_sync()") -; (nvim.ex.autocmd "BufEnter,CursorHold,InsertLeave" : :lua "vim.lsp.codelens.refresh()") - - ; client autocmds -; -- vim.api.nvim_command[[autocmd BufWritePre lua vim.lsp.buf_request_sync(vim.api.nvim_get_current_buf(), 'workspace/executeCommand', {command = 'clean-ns', arguments = {vim.uri_from_bufnr(1), vim.api.nvim_win_get_cursor(0)[1], vim.api.nvim_win_get_cursor(0)[2]}, title = 'Clean Namespace'})]] - - (print "LSP Client Attached.")) + (each [mapping cmd (pairs core-nmappings)] + (nbufmap mapping cmd)) ; x mode mappings + (xbufmap :fa "lua vim.lsp.buf.format()") + ; -- buf_set_keymap('n', 'gs', 'lua vim.lsp.buf.document_symbol()', opts) + ; -- buf_set_keymap('n', 'gS', 'lua vim.lsp.buf.workspace_symbol()', opts) + ; -- buf_set_keymap('n', 'gt', 'lua vim.lsp.buf.type_definition()', opts) + ; -- buf_set_keymap('n', 'wa', 'lua vim.lsp.buf.add_workspace_folder()', opts) + ; -- buf_set_keymap('n', 'wr', 'lua vim.lsp.buf.remove_workspace_folder()', opts) + ; -- buf_set_keymap('n', 'wl', 'lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))', opts) + ; -- buf_set_keymap('n', 'q', 'lua vim.lsp.diagnostic.set_loclist()', opts) + ; -- buf_set_keymap('n', 'ic', "lua vim.lsp.buf.incoming_calls()", opts) + ; -- buf_set_keymap('x', 'ic', "lua vim.lsp.buf.incoming_calls()", opts) + (nvim.buf_set_option 0 :omnifunc "v:lua.vim.lsp.omnifunc") + (bind-client-mappings client) + (nvim.ex.autocmd :BufWritePre : :lua + "vim.lsp.buf.formatting_sync()") + ; (nvim.ex.autocmd "BufEnter,CursorHold,InsertLeave" : :lua "vim.lsp.codelens.refresh()") + ; client autocmds + ; -- vim.api.nvim_command[[autocmd BufWritePre lua vim.lsp.buf_request_sync(vim.api.nvim_get_current_buf(), 'workspace/executeCommand', {command = 'clean-ns', arguments = {vim.uri_from_bufnr(1), vim.api.nvim_win_get_cursor(0)[1], vim.api.nvim_win_get_cursor(0)[2]}, title = 'Clean Namespace'})]] + (print "LSP Client Attached.")) (let [lspi (require :nvim-lsp-installer)] (when lspi - (defn lsp-execute-command [cmd ...] - (let [buf-uri (vim.uri_from_bufnr 0) - cursor (vim.api.nvim_win_get_cursor 0) - r (- (a.first cursor) 1) - c (a.second cursor) - opts [buf-uri r c] - args (a.concat opts [...])] - (vim.lsp.buf.execute_command {:command cmd - :arguments args}))) - + (let [buf-uri (vim.uri_from_bufnr 0) + cursor (vim.api.nvim_win_get_cursor 0) + r (- (a.first cursor) 1) + c (a.second cursor) + opts [buf-uri r c] + args (a.concat opts [...])] + (vim.lsp.buf.execute_command {:command cmd :arguments args}))) (defn setup-servers [] - (lspi.on_server_ready (fn [server] - (let [opts {:on_attach on_attach :flags {:debounce_text_changes 150} }] - (server:setup opts)))) - ;; (let [lspconfig (require :lspconfig) - ;; servers (lspi.get_installed_servers)] - ;; (each [_ server (pairs servers)] - ;; (server.setup {:on_attach on_attach :flags {:debounce_text_changes 150} }))) - ) - - (defn on-post-install [] - (setup-servers) - (nvim.ex.bufdo :e)) - + (lspi.on_server_ready (fn [server] + (let [opts {: on_attach + :flags {:debounce_text_changes 150}}] + (server:setup opts)))) + ;; (let [lspconfig (require :lspconfig) + ;; servers (lspi.get_installed_servers)] + ;; (each [_ server (pairs servers)] + ;; (server.setup {:on_attach on_attach :flags {:debounce_text_changes 150} }))) + ) + (defn on-post-install [] (setup-servers) (nvim.ex.bufdo :e)) (setup-servers) - (set lspi.post_install_hook on-post-install) - (nu.fn-bridge :LspExecuteCommand :dotfiles.plugin.lspconfig :lsp-execute-command {:return false}) + (nu.fn-bridge :LspExecuteCommand :dotfiles.plugin.lspconfig + :lsp-execute-command {:return false}) + (u.nnoremap :li :LspInfo))) - (u.nnoremap :li "LspInfo"))) +(comment (let [lspi (require :nvim-lsp-installer) + ;lspconfig (require :lspconfig) + servers (lspi.get_installed_servers)] + (each [_ server (pairs servers)] + (a.pr server)))) diff --git a/nvim/.config/nvim/fnl/dotfiles/plugin/null-ls.fnl b/nvim/.config/nvim/fnl/dotfiles/plugin/null-ls.fnl new file mode 100644 index 0000000..5aaf375 --- /dev/null +++ b/nvim/.config/nvim/fnl/dotfiles/plugin/null-ls.fnl @@ -0,0 +1,13 @@ +(module dotfiles.plugin.null-ls + {autoload {nvim aniseed.nvim + a aniseed.core + nu aniseed.nvim.util + null-ls null-ls + lspconfig dotfiles.plugin.lspconfig}}) + +(def null-ls-server-options + {:sources [null-ls.builtins.formatting.stylua + null-ls.builtins.formatting.fnlfmt] + :on_attach lspconfig.on_attach}) + +(null-ls.setup null-ls-server-options) diff --git a/nvim/.config/nvim/fnl/dotfiles/plugins.fnl b/nvim/.config/nvim/fnl/dotfiles/plugins.fnl index 1fdc5a6..d711f40 100644 --- a/nvim/.config/nvim/fnl/dotfiles/plugins.fnl +++ b/nvim/.config/nvim/fnl/dotfiles/plugins.fnl @@ -50,6 +50,8 @@ :hrsh7th/vim-vsnip-integ {} :Iron-E/nvim-soluarized {} :jiangmiao/auto-pairs {} ; backets, parens, and quotes in pairs + :jose-elias-alvarez/null-ls.nvim {:mod :null-ls + :requires [:nvim-lua/plenary.nvim]} :junegunn/vim-easy-align {:mod :easyalign} :kovisoft/paredit {:mod :paredit} :kristijanhusak/vim-dadbod-completion {}