From 62e83d83f551cf9c4276e0ebb49ca228b0093bee Mon Sep 17 00:00:00 2001 From: ViViDboarder Date: Wed, 29 May 2024 13:16:28 -0700 Subject: [PATCH] Refactor to drop 0.6 support Lightly tested: Finish up refactor Remove old lspconfig hack Refactor to avoid deprecated function when not needed --- neovim/lua/_bindings.lua | 22 +-- neovim/lua/_colors.lua | 15 +- neovim/lua/_settings.lua | 15 +- neovim/lua/init.lua | 8 +- neovim/lua/plugins.lua | 40 ++---- neovim/lua/plugins/completion.lua | 4 +- neovim/lua/plugins/copilotchat.lua | 2 +- neovim/lua/plugins/grepper.lua | 36 ++--- neovim/lua/plugins/lsp.lua | 207 +++++++++++----------------- neovim/lua/plugins/lualine.lua | 24 +--- neovim/lua/plugins/null-ls/init.lua | 7 +- neovim/lua/plugins/telescope.lua | 52 +++---- neovim/lua/utils.lua | 63 ++------- 13 files changed, 152 insertions(+), 343 deletions(-) diff --git a/neovim/lua/_bindings.lua b/neovim/lua/_bindings.lua index b371610..36b5f64 100644 --- a/neovim/lua/_bindings.lua +++ b/neovim/lua/_bindings.lua @@ -40,31 +40,19 @@ utils.keymap_set("i", "``", "", { desc = "Escape insert" }) utils.keymap_set("v", "``", "", { desc = "Escape visual" }) -- C-Space completion -function _G.complete_space() +utils.keymap_set("i", "", function() if vim.fn.pumvisible() == 1 then return utils.t("") - elseif utils.is_plugin_loaded("completion-nvim") then - return utils.t("(completion_trigger)") - elseif utils.is_plugin_loaded("nvim-compe") then - return vim.fn["compe#complete"]() elseif utils.is_plugin_loaded("nvim-cmp") then return utils.t("(cmp_complete)") else return utils.t("") end -end -utils.keymap_set("i", "", "v:lua.complete_space()", { expr = true }) +end, { expr = true }) --- TODO: remove check when dropping v0.6.0 -if vim.fn.has("nvim-0.7.0") == 1 then - vim.api.nvim_create_user_command("TagsUpdate", "!ctags -R .", { desc = "Update ctags" }) - vim.api.nvim_create_user_command("Todo", "grep TODO", { desc = "Search for TODO tags" }) - vim.api.nvim_create_user_command("Spell", "setlocal spell! spelllang=en_us", { desc = "Toggle spelling" }) -else - vim.cmd("command! TagsUpdate !ctags -R .") - vim.cmd("command! Todo grep TODO") - vim.cmd("command Spell setlocal spell! spelllang=en_us") -end +vim.api.nvim_create_user_command("TagsUpdate", "!ctags -R .", { desc = "Update ctags" }) +vim.api.nvim_create_user_command("Todo", "grep TODO", { desc = "Search for TODO tags" }) +vim.api.nvim_create_user_command("Spell", "setlocal spell! spelllang=en_us", { desc = "Toggle spelling" }) -- Pop spelling completion for word under cursor utils.keymap_set("n", "s", "viwas", { desc = "Show spelling suggestions" }) diff --git a/neovim/lua/_colors.lua b/neovim/lua/_colors.lua index f107a16..844c6ee 100644 --- a/neovim/lua/_colors.lua +++ b/neovim/lua/_colors.lua @@ -61,16 +61,11 @@ end -- Don't need the autocommand when dark-notify is installed local utils = require("utils") if not utils.is_plugin_loaded("dark-notify") then - -- TODO: remove check when dropping v0.6.0 - if vim.fn.has("nvim-0.7.0") == 1 then - vim.api.nvim_create_autocmd({ "FocusGained" }, { - pattern = "*", - callback = _G.update_colors, - group = vim.api.nvim_create_augroup("auto_colors", { clear = true }), - }) - else - utils.autocmd("auto_colors", "FocusGained * call v:lua.update_colors()") - end + vim.api.nvim_create_autocmd({ "FocusGained" }, { + pattern = "*", + callback = _G.update_colors, + group = vim.api.nvim_create_augroup("auto_colors", { clear = true }), + }) end -- Initial setting of colors diff --git a/neovim/lua/_settings.lua b/neovim/lua/_settings.lua index a192ae4..36e4cb7 100644 --- a/neovim/lua/_settings.lua +++ b/neovim/lua/_settings.lua @@ -37,16 +37,11 @@ o.mouse = "a" -- Autocomplete options o.completeopt = "menuone,noinsert,noselect,preview" --- TODO: remove check when dropping v0.6.0 -if vim.fn.has("nvim-0.7.0") == 1 then - vim.api.nvim_create_autocmd({ "CompleteDone" }, { - pattern = "*", - command = "if pumvisible() == 0 | pclose | endif", - group = vim.api.nvim_create_augroup("close_preview", { clear = true }), - }) -else - utils.autocmd("close_preview", "CompleteDone * if pumvisible() == 0 | pclose | endif", true) -end +vim.api.nvim_create_autocmd({ "CompleteDone" }, { + pattern = "*", + command = "if pumvisible() == 0 | pclose | endif", + group = vim.api.nvim_create_augroup("close_preview", { clear = true }), +}) local has = vim.fn.has g.is_mac = (has("mac") or has("macunix") or has("gui_macvim") or vim.fn.system("uname"):find("^darwin") ~= nil) diff --git a/neovim/lua/init.lua b/neovim/lua/init.lua index c259fc5..f3f575c 100644 --- a/neovim/lua/init.lua +++ b/neovim/lua/init.lua @@ -1,5 +1,5 @@ -if vim.fn.has("nvim-0.6.0") ~= 1 then - print("ERROR: Requires nvim >= 0.6.0") +if vim.fn.has("nvim-0.7.0") ~= 1 then + print("ERROR: Requires nvim >= 0.7.0") end local o = vim.o @@ -26,4 +26,6 @@ vim.g.polyglot_disabled = { "go", "rust" } -- Plugins -- Packer auto installs and then lazy loads itself on PackerCommand and require the plugins module -- This command should only really be needed to bootstrap a new system -vim.cmd([[command! PackerBootstrap lua require("plugins")]]) +vim.api.nvim_create_user_command("PackerBootstrap", function() + require("plugins") +end, { desc = "Bootstrap Packer" }) diff --git a/neovim/lua/plugins.lua b/neovim/lua/plugins.lua index d9c3b29..49bd8ce 100644 --- a/neovim/lua/plugins.lua +++ b/neovim/lua/plugins.lua @@ -190,16 +190,9 @@ use({ }) -- Custom status line -use({ - "https://github.com/SmiteshP/nvim-gps", - requires = "https://github.com/nvim-treesitter/nvim-treesitter", - disable = vim.fn.has("nvim-0.7.0") == 1, -}) --- Replaces gps for 0.7+ use({ "https://github.com/SmiteshP/nvim-navic", requires = "https://github.com/neovim/nvim-lspconfig", - disable = vim.fn.has("nvim-0.7.0") ~= 1, }) use({ @@ -207,7 +200,7 @@ use({ config = function() require("plugins.lualine").config_lualine() end, - after = vim.fn.has("nvim-0.7.0") == 1 and "nvim-navic" or "nvim-gps", + after = "nvim-navic", }) -- On Mac, update colors when dark mode changes @@ -305,8 +298,6 @@ use({ "https://github.com/neovim/nvim-lspconfig", "https://github.com/williamboman/mason-lspconfig.nvim", }, - -- Only supports >=0.7.0 - disable = vim.fn.has("nvim-0.7.0") ~= 1, }) -- Lua dev for vim @@ -318,7 +309,6 @@ use({ -- Rust analyzer use({ "https://github.com/simrat39/rust-tools.nvim", - disable = vim.fn.has("nvim-0.7.0") ~= 1, }) -- Better display of lsp diagnostics @@ -388,16 +378,6 @@ use({ require("utils").require_with_local("plugins.treesitter").setup() end, }) ---[[ TODO: Enable this as an alterantive or fallback for LSPs -use({ - "https://github.com/nvim-treesitter/nvim-treesitter-refactor", - requires = "https://github.com/nvim-treesitter/nvim-treesitter", - commit = utils.map_version_rule({ - [">=0.7.0"] = utils.nil_val, - ["<0.7.0"] = "75f5895", - }), -}) ---]] use({ "https://github.com/nvim-treesitter/nvim-treesitter-textobjects", requires = "https://github.com/nvim-treesitter/nvim-treesitter", @@ -497,13 +477,17 @@ use("https://github.com/hsanson/vim-android") use({ "https://github.com/sheerun/vim-polyglot", config = function() - -- TODO: Replace with api calls when dropping 0.6 - vim.cmd([[ - augroup polyglot_fts - au BufRead,BufNewFile */playbooks/*.yml,*/playbooks/*.yaml set filetype=yaml.ansible - au BufRead,BufNewFile go.mod,go.sum set filetype=gomod - augroup end - ]]) + local gid = vim.api.nvim_create_augroup("polyglot_fts", { clear = true }) + vim.api.nvim_create_autocmd({ "BufRead", "BufNewFile" }, { + pattern = { "*/playbooks/*.yml", "*/playbooks/*.yaml" }, + command = "set filetype=yaml.ansible", + group = gid, + }) + vim.api.nvim_create_autocmd({ "BufRead", "BufNewFile" }, { + pattern = { "go.mod", "go.sum" }, + command = "set filetype=gomod", + group = gid, + }) end, }) diff --git a/neovim/lua/plugins/completion.lua b/neovim/lua/plugins/completion.lua index 464f398..62afe7d 100644 --- a/neovim/lua/plugins/completion.lua +++ b/neovim/lua/plugins/completion.lua @@ -48,7 +48,9 @@ function M.config_cmp() -- Add a plug mapping to use in C-Space binding local utils = require("utils") - utils.keymap_set("i", "(cmp_complete)", "lua require('cmp').complete()", { desc = "Autocomplete" }) + utils.keymap_set("i", "(cmp_complete)", function() + require("cmp").complete() + end, { desc = "Autocomplete" }) -- Maybe add obsidian and obsidian new. This is done here in case obsidian.nvim is loaded before cmp utils.try_require("cmp_obsidian", function(cmp_obsidian) diff --git a/neovim/lua/plugins/copilotchat.lua b/neovim/lua/plugins/copilotchat.lua index 118c917..6775e92 100644 --- a/neovim/lua/plugins/copilotchat.lua +++ b/neovim/lua/plugins/copilotchat.lua @@ -16,7 +16,7 @@ function M.setup() local utils = require("utils") if utils.try_require("telescope") ~= nil then - local cc_keymap = utils.curry_keymap("n", "cc") + local cc_keymap = utils.curry_keymap("n", "cc", { group_desc = "CopilotChat" }) cc_keymap("h", function() local actions = require("CopilotChat.actions") diff --git a/neovim/lua/plugins/grepper.lua b/neovim/lua/plugins/grepper.lua index e4953b1..1d3dfca 100644 --- a/neovim/lua/plugins/grepper.lua +++ b/neovim/lua/plugins/grepper.lua @@ -15,33 +15,15 @@ require("utils").keymap_set({ "n", "x" }, "gs", "(GrepperOperator)", { }) -- Override Todo command to use Grepper --- TODO: Remove check when dropping 0.6 -if vim.fn.has("nvim-0.7.0") == 1 then - vim.api.nvim_create_user_command("Todo", ":Grepper -noprompt -query TODO", { desc = "Search for TODO tags" }) -else - vim.cmd("command! Todo :Grepper -noprompt -query TODO") -end +vim.api.nvim_create_user_command("Todo", ":Grepper -noprompt -query TODO", { desc = "Search for TODO tags" }) -- Make some shortands for various grep programs --- TODO: Remove check when dropping 0.6 -if vim.fn.has("nvim-0.7.0") == 1 then - if vim.fn.executable("rg") == 1 then - vim.api.nvim_create_user_command("Rg", ":GrepperRg ", { nargs = "+", desc = "Ripgrep" }) - end - if vim.fn.executable("ag") == 1 then - vim.api.nvim_create_user_command("Ag", ":GrepperAg ", { nargs = "+", desc = "Silversearcher" }) - end - if vim.fn.executable("ack") == 1 then - vim.api.nvim_create_user_command("Ack", ":GrepperAck ", { nargs = "+", desc = "Ack search" }) - end -else - if vim.fn.executable("rg") == 1 then - vim.cmd("command -nargs=+ Rg :GrepperRg ") - end - if vim.fn.executable("ag") == 1 then - vim.cmd("command -nargs=+ Ag :GrepperAg ") - end - if vim.fn.executable("ack") == 1 then - vim.cmd("command -nargs=+ Ack :GrepperAck ") - end +if vim.fn.executable("rg") == 1 then + vim.api.nvim_create_user_command("Rg", ":GrepperRg ", { nargs = "+", desc = "Ripgrep" }) +end +if vim.fn.executable("ag") == 1 then + vim.api.nvim_create_user_command("Ag", ":GrepperAg ", { nargs = "+", desc = "Silversearcher" }) +end +if vim.fn.executable("ack") == 1 then + vim.api.nvim_create_user_command("Ack", ":GrepperAck ", { nargs = "+", desc = "Ack search" }) end diff --git a/neovim/lua/plugins/lsp.lua b/neovim/lua/plugins/lsp.lua index 456bd06..19a2d13 100644 --- a/neovim/lua/plugins/lsp.lua +++ b/neovim/lua/plugins/lsp.lua @@ -73,107 +73,64 @@ local function get_default_attach(override_capabilities) server_capabilities = vim.tbl_extend("force", server_capabilities, override_capabilities or {}) end - local function buf_set_option(...) - vim.api.nvim_buf_set_option(bufnr, ...) - end - -- Set built in features to use lsp functions (automatic in nvim-0.8) -- HACK: Support for <0.8 if vim.fn.has("nvim-0.8") ~= 1 then - buf_set_option("omnifunc", "v:lua.vim.lsp.omnifunc") + vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc") if server_capabilities.documentSymbolProvider then - buf_set_option("tagfunc", "v:lua.vim.lsp.tagfunc") + vim.api.nvim_buf_set_option(bufnr, "tagfunc", "v:lua.vim.lsp.tagfunc") end if server_capabilities.documentFormattingProvider then - buf_set_option("formatexpr", "v:lua.vim.lsp.formatexpr()") + vim.api.nvim_buf_set_option(bufnr, "formatexpr", "v:lua.vim.lsp.formatexpr()") end end -- Mappings - -- TODO: use functions instead of strings when dropping 0.6 - local lsp_keymap = utils.curry_keymap("n", "l", { buffer = bufnr }) - lsp_keymap("h", "lua vim.lsp.buf.hover()", { desc = "Display hover" }) - lsp_keymap("rn", "lua vim.lsp.buf.rename()", { desc = "Refactor rename" }) - lsp_keymap("e", "lua vim.diagnostic.open_float()", { desc = "Open float dialog" }) - lsp_keymap("D", "lua vim.lsp.buf.declaration()", { desc = "Go to declaration" }) - lsp_keymap("d", "lua vim.lsp.buf.definition()", { desc = "Go to definition" }) - lsp_keymap("t", "lua vim.lsp.buf.type_definition()", { desc = "Go to type definition" }) - lsp_keymap("i", "lua vim.lsp.buf.implementation()", { desc = "Show implementations" }) - lsp_keymap("s", "lua vim.lsp.buf.signature_help()", { desc = "Show signature help" }) - lsp_keymap("wa", "lua vim.lsp.buf.add_workspace_folder()", { desc = "Workspace: Add folder" }) - lsp_keymap("wr", "lua vim.lsp.buf.remove_workspace_folder()", { desc = "Workspace: Remove folder" }) - lsp_keymap( - "wl", - "lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))", - { desc = "Workspace: List folders" } - ) - lsp_keymap("r", "lua vim.lsp.buf.references()", { desc = "References" }) - lsp_keymap("p", "lua vim.diagnostic.goto_prev()", { desc = "Previous diagnostic" }) - lsp_keymap("n", "lua vim.diagnostic.goto_next()", { desc = "Next diagnostic" }) + local lsp_keymap = utils.curry_keymap("n", "l", { buffer = bufnr, group_desc = "LSP" }) + lsp_keymap("h", vim.lsp.buf.hover, { desc = "Display hover" }) + lsp_keymap("rn", vim.lsp.buf.rename, { desc = "Refactor rename" }) + lsp_keymap("e", vim.diagnostic.open_float, { desc = "Open float dialog" }) + lsp_keymap("D", vim.lsp.buf.declaration, { desc = "Go to declaration" }) + lsp_keymap("d", vim.lsp.buf.definition, { desc = "Go to definition" }) + lsp_keymap("t", vim.lsp.buf.type_definition, { desc = "Go to type definition" }) + lsp_keymap("i", vim.lsp.buf.implementation, { desc = "Show implementations" }) + lsp_keymap("s", vim.lsp.buf.signature_help, { desc = "Show signature help" }) + lsp_keymap("wa", vim.lsp.buf.add_workspace_folder, { desc = "Workspace: Add folder" }) + lsp_keymap("wr", vim.lsp.buf.remove_workspace_folder, { desc = "Workspace: Remove folder" }) + lsp_keymap("wl", function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, { desc = "Workspace: List folders" }) + lsp_keymap("r", vim.lsp.buf.references, { desc = "References" }) + lsp_keymap("p", vim.diagnostic.goto_prev, { desc = "Previous diagnostic" }) + lsp_keymap("n", vim.diagnostic.goto_next, { desc = "Next diagnostic" }) + if server_capabilities.codeActionProvider then + lsp_keymap("A", vim.lsp.buf.code_action, { desc = "Select code actions" }) + lsp_keymap("A", vim.lsp.buf.code_action, { mode = "v", desc = "Select code actions" }) + end -- Set insert keymap for signature help - utils.keymap_set( - "i", - "", - "lua vim.lsp.buf.signature_help()", - { buffer = bufnr, desc = "Show signature help" } - ) + utils.keymap_set("i", "", vim.lsp.buf.signature_help, { buffer = bufnr, desc = "Show signature help" }) -- Some top level aliases or remaps - utils.keymap_set("n", "K", "lua vim.lsp.buf.hover()", { buffer = bufnr, desc = "Display hover" }) - utils.keymap_set( - "n", - "gD", - "lua vim.lsp.buf.declaration()", - { buffer = bufnr, desc = "Go to declaration" } - ) - utils.keymap_set( - "n", - "gd", - "lua vim.lsp.buf.definition()", - { buffer = bufnr, desc = "Go to definition" } - ) - utils.keymap_set( - "n", - "rn", - "lua vim.lsp.buf.rename()", - { buffer = bufnr, desc = "Refactor rename" } - ) - utils.keymap_set( - "n", - "[d", - "lua vim.diagnostic.goto_prev()", - { buffer = bufnr, desc = "Previous diagnostic" } - ) - utils.keymap_set( - "n", - "]d", - "lua vim.diagnostic.goto_next()", - { buffer = bufnr, desc = "Next diagnostic" } - ) - - -- Older keymaps - --[[ - buf_set_keymap("n", "gi", "lua vim.lsp.buf.implementation()", 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", "D", "lua vim.lsp.buf.type_definition()", opts) - buf_set_keymap("n", "rn", "lua vim.lsp.buf.rename()", opts) - buf_set_keymap("n", "gr", "lua vim.lsp.buf.references()", opts) - buf_set_keymap("n", "e", "lua vim.diagnostic.open_float()", opts) - buf_set_keymap("n", "q", "lua vim.lsp.diagnostic.set_loclist()", opts) - --]] + utils.keymap_set("n", "K", vim.lsp.buf.hover, { buffer = bufnr, desc = "Display hover" }) + utils.keymap_set("n", "gD", vim.lsp.buf.declaration, { buffer = bufnr, desc = "Go to declaration" }) + utils.keymap_set("n", "gd", vim.lsp.buf.definition, { buffer = bufnr, desc = "Go to definition" }) + utils.keymap_set("n", "rn", vim.lsp.buf.rename, { buffer = bufnr, desc = "Refactor rename" }) + utils.keymap_set("n", "[d", vim.diagnostic.goto_prev, { buffer = bufnr, desc = "Previous diagnostic" }) + utils.keymap_set("n", "]d", vim.diagnostic.goto_next, { buffer = bufnr, desc = "Next diagnostic" }) -- Open diagnostic on hold - if vim["diagnostic"] ~= nil then - -- TODO: When dropping 0.6, use lua aucommand api - vim.cmd([[autocmd CursorHold * lua vim.diagnostic.open_float(nil, {focus=false, scope="cursor"})]]) - end + vim.api.nvim_create_autocmd({ "CursorHold" }, { + pattern = "", + callback = function() + vim.diagnostic.open_float(nil, { focus = false, scope = "cursor" }) + end, + group = vim.api.nvim_create_augroup("diagnostic_float", { clear = true }), + desc = "Open float dialog on hold", + }) -- Use IncRename if available if utils.try_require("inc_rename") ~= nil then - -- TODO: Should I be using this for calling lua functions from keymaps? vim.keymap.set("n", "rn", function() return ":IncRename " .. vim.fn.expand("") end, { expr = true, buffer = true, desc = "Rename current symbol" }) @@ -181,12 +138,12 @@ local function get_default_attach(override_capabilities) -- Set some keybinds conditional on server capabilities if vim.fn.has("nvim-0.8") == 1 then - lsp_keymap("f", "lua vim.lsp.buf.format({async=true})", { desc = "Format code" }) - lsp_keymap( - "f", - "lua vim.lsp.buf.format({async=true})", - { mode = "v", desc = "Format selected code" } - ) + lsp_keymap("f", function() + vim.lsp.buf.format({ async = true }) + end, { desc = "Format code" }) + lsp_keymap("f", function() + vim.lsp.buf.format({ async = true }) + end, { mode = "v", desc = "Format selected code" }) if server_capabilities.documentFormattingProvider then vim.api.nvim_create_autocmd({ "BufWritePre" }, { pattern = { "*.rs", "*.go", "*.sh", "*.lua" }, @@ -198,60 +155,58 @@ local function get_default_attach(override_capabilities) }) end else - -- HACK: Support for <0.8 - lsp_keymap("f", "lua vim.lsp.buf.formatting()", { desc = "Format code" }) - lsp_keymap( - "f", - "lua vim.lsp.buf.range_formatting()", - { mode = "v", desc = "Format selected code" } - ) + -- HACK: Support for <0.8 with older formatting + lsp_keymap("f", vim.lsp.buf.formatting, { desc = "Format code" }) + lsp_keymap("f", vim.lsp.buf.range_formatting, { mode = "v", desc = "Format selected code" }) if server_capabilities.documentFormattingProvider then - vim.cmd([[ - augroup lsp_format - autocmd! - autocmd BufWritePre lua vim.lsp.buf.formatting_sync(nil, 1000) - augroup END - ]]) + vim.api.nvim_create_autocmd({ "BufWritePre" }, { + pattern = { "*.rs", "*.go", "*.sh", "*.lua" }, + callback = function() + vim.lsp.buf.formatting_sync(nil, 1000) + end, + group = vim.api.nvim_create_augroup("lsp_format", { clear = true }), + desc = "Auto format code on save", + }) end end -- Set autocommands conditional on server_capabilities if server_capabilities.documentHighlightProvider then - vim.cmd([[ - :highlight link LspReferenceRead MatchParen - :highlight link LspReferenceText MatchParen - :highlight link LspReferenceWrite MatchParen - augroup lsp_document_highlight - autocmd! - autocmd CursorHold lua vim.lsp.buf.document_highlight() - autocmd CursorMoved lua vim.lsp.buf.clear_references() - augroup END - ]]) + vim.api.nvim_set_hl(0, "LspReferenceRead", { link = "MatchParen" }) + vim.api.nvim_set_hl(0, "LspReferenceText", { link = "MatchParen" }) + vim.api.nvim_set_hl(0, "LspReferenceWrite", { link = "MatchParen" }) + local hl_group = vim.api.nvim_create_augroup("lsp_document_highlight", { clear = true }) + vim.api.nvim_create_autocmd( + { "CursorHold" }, + { pattern = "", callback = vim.lsp.buf.document_highlight, group = hl_group } + ) + vim.api.nvim_create_autocmd( + { "CursorMoved" }, + { pattern = "", callback = vim.lsp.buf.clear_references, group = hl_group } + ) end -- Some override some fuzzy finder bindings to use lsp sources - if utils.try_require("telescope") ~= nil then + utils.try_require("telescope.builtin", function(telescope_builtin) -- Replace some Telescope bindings with LSP versions - local telescope_keymap = utils.curry_keymap("n", "f", { buffer = bufnr }) + local telescope_keymap = utils.curry_keymap("n", "f", { buffer = bufnr, group_desc = "Finder" }) if server_capabilities.documentSymbolProvider then - telescope_keymap("t", "Telescope lsp_document_symbols", { desc = "Find buffer tags" }) + telescope_keymap("t", telescope_builtin.lsp_document_symbols, { desc = "Find buffer tags" }) end if server_capabilities.workspaceSymbolProvider then - telescope_keymap("T", "Telescope lsp_dynamic_workspace_symbols", { desc = "Find tags" }) + telescope_keymap("T", telescope_builtin.lsp_dynamic_workspace_symbols, { desc = "Find tags" }) end -- Replace some LSP bindings with Telescope ones if server_capabilities.definitionProvider then - lsp_keymap("d", "Telescope lsp_definitions", { desc = "Find definition" }) + lsp_keymap("d", telescope_builtin.lsp_definitions, { desc = "Find definition" }) end if server_capabilities.typeDefinitionProvider then - lsp_keymap("t", "Telescope lsp_type_definition", { desc = "Find type definition" }) + lsp_keymap("t", telescope_builtin.lsp_type_definitions, { desc = "Find type definition" }) end - lsp_keymap("i", "Telescope lsp_implementations", { desc = "Find implementations" }) - lsp_keymap("r", "Telescope lsp_references", { desc = "Find references" }) - lsp_keymap("A", "Telescope lsp_code_actions", { desc = "Select code actions" }) - lsp_keymap("A", "Telescope lsp_range_code_actions", { mode = "v", desc = "Select code actions" }) - end + lsp_keymap("i", telescope_builtin.lsp_implementations, { desc = "Find implementations" }) + lsp_keymap("r", telescope_builtin.lsp_references, { desc = "Find references" }) + end) -- Attach navic for statusline location if server_capabilities.documentSymbolProvider then @@ -342,13 +297,7 @@ function M.config_lsp() -- Auto setup mason installed servers utils.try_require("mason-lspconfig", function(mason_lspconfig) -- Get list of servers that are installed but not set up - local already_setup - if lsp_config["util"] and lsp_config.util["available_servers"] then - already_setup = lsp_config.util.available_servers() - else - -- HACK: For lspconfig versions lower than 0.1.4, which is required for nvim <0.7.0 - already_setup = lsp_config.available_servers() - end + local already_setup = lsp_config.util.available_servers() local needs_setup = vim.tbl_filter(function(server) return not vim.tbl_contains(already_setup, server) end, mason_lspconfig.get_installed_servers()) diff --git a/neovim/lua/plugins/lualine.lua b/neovim/lua/plugins/lualine.lua index 38e96d9..8a18501 100644 --- a/neovim/lua/plugins/lualine.lua +++ b/neovim/lua/plugins/lualine.lua @@ -56,22 +56,8 @@ function M.config_lualine(theme_name) theme_name = "wombat" end - -- gps / navic + -- navic local code_loc = {} - - utils.try_require("nvim-gps", function(gps) - gps.setup({ - icons = { - ["class-name"] = "(c) ", - ["function-name"] = "(ƒ) ", - ["method-name"] = "(m) ", - ["container-name"] = "", - ["tag-name"] = "(t) ", - }, - }) - code_loc = { gps.get_location, cond = gps.is_available } - end) - utils.try_require("nvim-navic", function(navic) navic.setup({ icons = { @@ -89,12 +75,6 @@ function M.config_lualine(theme_name) code_loc = { "navic" } end) - local diagnostic_plugin = "nvim_diagnostic" - -- HACK: Support for <0.6 - if vim.fn.has("nvim-0.6.0") ~= 1 then - diagnostic_plugin = "nvim_lsp" - end - require("lualine").setup({ options = { theme = theme_name, @@ -116,7 +96,7 @@ function M.config_lualine(theme_name) lualine_x = { M.custom_ffenc, "filetype" }, lualine_y = { "progress", "location" }, lualine_z = { - { "diagnostics", sources = { diagnostic_plugin } }, + { "diagnostics", sources = { "nvim_diagnostic" } }, { M.mixed_indent, color = { bg = "#de4f1f" } }, { M.trailing_whitespace, color = { bg = "#de4f1f" } }, }, diff --git a/neovim/lua/plugins/null-ls/init.lua b/neovim/lua/plugins/null-ls/init.lua index 8d24385..5868d43 100644 --- a/neovim/lua/plugins/null-ls/init.lua +++ b/neovim/lua/plugins/null-ls/init.lua @@ -6,12 +6,7 @@ local function disable_formatter_filetypes_for_existing_servers(sources, preserv local server_filetypes = {} utils.try_require("lspconfig", function(lsp_config) local available_servers - if lsp_config["util"] and lsp_config.util["available_servers"] then - available_servers = lsp_config.util.available_servers() - else - -- HACK: For lspconfig versions lower than 0.1.4, which is required for nvim <0.7.0 - available_servers = lsp_config.available_servers() - end + available_servers = lsp_config.util.available_servers() vim.tbl_map(function(server) if lsp_config[server].filetypes ~= nil then vim.list_extend(server_filetypes, lsp_config[server].filetypes) diff --git a/neovim/lua/plugins/telescope.lua b/neovim/lua/plugins/telescope.lua index edd2ab6..d1be74f 100644 --- a/neovim/lua/plugins/telescope.lua +++ b/neovim/lua/plugins/telescope.lua @@ -22,43 +22,27 @@ local function config_telescope() }) local utils = require("utils") - utils.keymap_set("n", "", "lua require('telescope.builtin').find_files()", { desc = "Find files" }) - utils.keymap_set("n", "b", "lua require('telescope.builtin').buffers()", { desc = "Find buffers" }) - utils.keymap_set( - "n", - "t", - "lua require('telescope.builtin').current_buffer_tags()", - { desc = "Find buffer tags" } - ) - utils.keymap_set( - "n", - "*", - "lua require('telescope.builtin').grep_string()", - { desc = "Find string under cursor" } - ) - -- Better spelling replacement for word under cursor - utils.keymap_set( - "n", - "s", - "lua require('telescope.builtin').spell_suggest(require('telescope.themes').get_cursor())", - { desc = "Spell check" } - ) + local telescope_builtin = require("telescope.builtin") - local finder_keymap = utils.curry_keymap("n", "f") - finder_keymap("b", "lua require('telescope.builtin').buffers()", { desc = "Find buffers" }) - finder_keymap("f", "lua require('telescope.builtin').find_files()", { desc = "Find file" }) - finder_keymap("g", "lua require('telescope.builtin').live_grep()", { desc = "Live grep" }) - finder_keymap("h", "lua require('telescope.builtin').help_tags()", { desc = "Find help tags" }) - finder_keymap("l", "lua require('telescope.builtin').resume()", { desc = "Resume finding" }) - finder_keymap("t", "lua require('telescope.builtin').current_buffer_tags()", { desc = "Find buffer tags" }) - finder_keymap("T", "lua require('telescope.builtin').tags()", { desc = "Find tags" }) + utils.keymap_set("n", "", telescope_builtin.find_files, { desc = "Find files" }) + utils.keymap_set("n", "b", telescope_builtin.buffers, { desc = "Find buffers" }) + utils.keymap_set("n", "t", telescope_builtin.current_buffer_tags, { desc = "Find buffer tags" }) + utils.keymap_set("n", "*", telescope_builtin.grep_string, { desc = "Find string under cursor" }) + utils.keymap_set("n", "s", function() + require("telescope.builtin").spell_suggest(require("telescope.themes").get_cursor()) + end, { desc = "Spell check" }) + + local finder_keymap = utils.curry_keymap("n", "f", { group_desc = "Finder" }) + finder_keymap("b", telescope_builtin.buffers, { desc = "Find buffers" }) + finder_keymap("f", telescope_builtin.find_files, { desc = "Find file" }) + finder_keymap("g", telescope_builtin.live_grep, { desc = "Live grep" }) + finder_keymap("h", telescope_builtin.help_tags, { desc = "Find help tags" }) + finder_keymap("l", telescope_builtin.resume, { desc = "Resume finding" }) + finder_keymap("t", telescope_builtin.current_buffer_tags, { desc = "Find buffer tags" }) + finder_keymap("T", telescope_builtin.tags, { desc = "Find tags" }) if utils.can_require("sg.telescope") then - finder_keymap( - "G", - "lua require('sg.telescope').fuzzy_search_results()", - { desc = "Search Sourcegraph" } - ) + finder_keymap("G", require("sg.telescope").fuzzy_search_results, { desc = "Search Sourcegraph" }) end load_extensions() diff --git a/neovim/lua/utils.lua b/neovim/lua/utils.lua index 75dab32..5769462 100644 --- a/neovim/lua/utils.lua +++ b/neovim/lua/utils.lua @@ -5,23 +5,6 @@ function M.get_color(synID, what, mode) return vim.fn.synIDattr(vim.fn.synIDtrans(vim.fn.hlID(synID)), what, mode) end --- Create an autocmd --- TODO: Remove this and use nvim_create_autocmd and nvim_create_augroup when dropping .6 -function M.autocmd(group, cmds, clear) - clear = clear == nil and false or clear - if type(cmds) == "string" then - cmds = { cmds } - end - vim.cmd("augroup " .. group) - if clear then - vim.cmd([[au!]]) - end - for _, cmd in ipairs(cmds) do - vim.cmd("autocmd " .. cmd) - end - vim.cmd([[augroup END]]) -end - -- Terminal escape a given string function M.t(str) return vim.api.nvim_replace_termcodes(str, true, true, true) @@ -195,36 +178,19 @@ end -- Calls keymap_set with preferred defaults function M.keymap_set(mode, lhs, rhs, opts) opts = vim.tbl_extend("keep", opts, { noremap = true, silent = true }) - -- TODO: Remove this check when dropping 0.6 support - if vim.fn.has("nvim-0.7") == 1 then - vim.keymap.set(mode, lhs, rhs, opts) - else - -- Desc is not supported in 0.6 - opts["desc"] = nil - if type(mode) ~= "string" then - for _, m in pairs(mode) do - M.keymap_set(m, lhs, rhs, opts) - end - return - end - -- Buffer requires a different function - local buffer = M.tbl_pop(opts, "buffer") - if buffer == nil then - vim.api.nvim_set_keymap(mode, lhs, rhs, opts) - else - vim.api.nvim_buf_set_keymap(buffer, mode, lhs, rhs, opts) - end - end + vim.keymap.set(mode, lhs, rhs, opts) end -- Returns a curried function for passing data into vim.keymap.set function M.curry_keymap(mode, prefix, default_opts) default_opts = vim.tbl_extend("keep", default_opts or {}, { noremap = true, silent = true }) - - -- TODO: Remove when dropping 0.6 - if vim.fn.has("nvim-0.7") ~= 1 then - -- NOTE: This is incompatible with a lua function on rhs and a bool buffer instead of number - return M.keymap_group(mode, prefix, default_opts) + local group_desc = M.tbl_pop(default_opts, "group_desc") + if group_desc ~= nil then + M.try_require("which-key", function(wk) + wk.register({ + [prefix] = "+" .. group_desc, + }, default_opts) + end) end return function(lhs, rhs, opts) @@ -234,19 +200,6 @@ function M.curry_keymap(mode, prefix, default_opts) end end --- Returns a function used to create keymaps with consistent prefixes -function M.keymap_group(mode, prefix, default_opts) - -- TODO: Remove when dropping 0.6 since curry_keymap exists - return function(lhs, rhs, opts) - opts = opts or default_opts - if opts ~= nil and default_opts ~= nil and opts ~= default_opts then - opts = vim.tbl_extend("keep", opts, default_opts) - end - local opt_mode = M.tbl_pop(opts, "mode") - M.keymap_set(opt_mode or mode, prefix .. lhs, rhs, opts) - end -end - -- Diagnostics signs M.diagnostic_signs = { Error = "🔥",