From 08797f4958f5948348068f2c08765e70c6889147 Mon Sep 17 00:00:00 2001 From: Toby Vincent Date: Mon, 6 Nov 2023 17:14:37 -0600 Subject: feat(nvim): update to nvim v0.10.0-dev-324fad1 --- nvim/.config/nvim/lua/tobyvin/keymaps.lua | 16 ++++ nvim/.config/nvim/lua/tobyvin/lsp.lua | 87 ++-------------------- nvim/.config/nvim/lua/tobyvin/lsp/capabilities.lua | 73 ++++++++++++++++++ nvim/.config/nvim/lua/tobyvin/lsp/handlers.lua | 12 ++- nvim/.config/nvim/lua/tobyvin/options.lua | 1 + nvim/.config/nvim/lua/tobyvin/utils/dap.lua | 6 +- nvim/.config/nvim/lua/tobyvin/utils/dashboard.lua | 21 +++++- 7 files changed, 120 insertions(+), 96 deletions(-) create mode 100644 nvim/.config/nvim/lua/tobyvin/lsp/capabilities.lua (limited to 'nvim/.config') diff --git a/nvim/.config/nvim/lua/tobyvin/keymaps.lua b/nvim/.config/nvim/lua/tobyvin/keymaps.lua index a01557a..8afa44d 100644 --- a/nvim/.config/nvim/lua/tobyvin/keymaps.lua +++ b/nvim/.config/nvim/lua/tobyvin/keymaps.lua @@ -13,6 +13,22 @@ vim.keymap.set({ "n", "v" }, "Y", [["+Y]], { desc = "yank lines into sel vim.keymap.set({ "n", "v" }, "p", [["+p]], { desc = "put lines from selection register" }) vim.keymap.set({ "n", "v" }, "P", [["+P]], { desc = "put lines from selection register" }) +vim.keymap.set({ "i", "s" }, "", function() + if vim.snippet.jumpable(1) then + return "lua vim.snippet.jump(1)" + else + return "" + end +end, { expr = true }) + +vim.keymap.set({ "i", "s" }, "", function() + if vim.snippet.jumpable(-1) then + return "lua vim.snippet.jump(-1)" + else + return "" + end +end, { expr = true }) + vim.keymap.set("n", "gqq", function() local cursor = vim.api.nvim_win_get_cursor(0) vim.cmd.normal("gggqG") diff --git a/nvim/.config/nvim/lua/tobyvin/lsp.lua b/nvim/.config/nvim/lua/tobyvin/lsp.lua index d60111e..1b96855 100644 --- a/nvim/.config/nvim/lua/tobyvin/lsp.lua +++ b/nvim/.config/nvim/lua/tobyvin/lsp.lua @@ -8,91 +8,14 @@ vim.api.nvim_create_autocmd("LspAttach", { group = augroup, desc = "setup lsp", callback = function(args) - ---@type lsp.Client local client = vim.lsp.get_client_by_id(args.data.client_id) - - if client.server_capabilities.documentHighlightProvider then - vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, { - group = augroup, - buffer = args.buf, - callback = vim.lsp.buf.document_highlight, - desc = "highlight references", - }) - - vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, { - group = augroup, - buffer = args.buf, - callback = vim.lsp.buf.clear_references, - desc = "clear references", - }) - end - - if client.server_capabilities.hoverProvider then - vim.keymap.set({ "n", "v" }, "K", vim.lsp.buf.hover, { desc = "hover", buffer = args.buf }) - end - - if client.server_capabilities.signatureHelpProvider then - vim.keymap.set("n", "", vim.lsp.buf.signature_help, { - desc = "signature help", - buffer = args.buf, - }) - end - - local on_list = function(options) - vim.fn.setqflist({}, " ", options) - vim.api.nvim_command("cfirst") - end - - if client.server_capabilities.declarationProvider then - vim.keymap.set("n", "gD", function() - vim.lsp.buf.declaration({ on_list = on_list }) - end, { desc = "declaration", buffer = args.buf }) - end - - if client.server_capabilities.definitionProvider then - vim.keymap.set("n", "gd", function() - vim.lsp.buf.definition({ on_list = on_list }) - end, { desc = "definition", buffer = args.buf }) - end - - if client.server_capabilities.typeDefinitionProvider then - vim.keymap.set("n", "go", function() - vim.lsp.buf.type_definition({ on_list = on_list }) - end, { desc = "type definition", buffer = args.buf }) - end - - if client.server_capabilities.implementationProvider then - vim.keymap.set("n", "gi", function() - vim.lsp.buf.implementation({ on_list = on_list }) - end, { desc = "implementation", buffer = args.buf }) - end - - if client.server_capabilities.referencesProvider then - vim.keymap.set("n", "gr", function() - vim.lsp.buf.references(nil, { on_list = on_list }) - end, { desc = "references", buffer = args.buf }) - end - - if client.server_capabilities.renameProvider then - vim.keymap.set("n", "lr", vim.lsp.buf.rename, { - desc = "rename", - buffer = args.buf, - }) - end - - if client.server_capabilities.codeActionProvider then - vim.keymap.set("n", "la", vim.lsp.buf.code_action, { - desc = "code action", - buffer = args.buf, - }) + if not client then + return end - if client.server_capabilities.experimental then - if client.server_capabilities.experimental.externalDocs then - vim.keymap.set("n", "gx", vim.lsp.buf.external_docs, { - desc = "external_docs", - buffer = args.buf, - }) + for method, setup_handler in pairs(require("tobyvin.lsp.capabilities")) do + if client.supports_method(method, { bufnr = args.buf }) then + setup_handler(args.buf) end end end, diff --git a/nvim/.config/nvim/lua/tobyvin/lsp/capabilities.lua b/nvim/.config/nvim/lua/tobyvin/lsp/capabilities.lua new file mode 100644 index 0000000..3d2d765 --- /dev/null +++ b/nvim/.config/nvim/lua/tobyvin/lsp/capabilities.lua @@ -0,0 +1,73 @@ +local on_list = function(options) + vim.fn.setqflist({}, " ", options) + vim.api.nvim_command("cfirst") +end + +local M = { + ["textDocument/documentHighlight"] = function(bufnr) + vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, { + buffer = bufnr, + callback = vim.lsp.buf.document_highlight, + desc = "lsp document highlight", + }) + vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, { + buffer = bufnr, + callback = vim.lsp.buf.clear_references, + desc = "lsp clear references", + }) + end, + ["textDocument/signatureHelp"] = function(bufnr) + vim.keymap.set("n", "", vim.lsp.buf.signature_help, { + buffer = bufnr, + desc = "signature help", + }) + end, + ["textDocument/declaration"] = function(bufnr) + vim.keymap.set("n", "gD", function() + vim.lsp.buf.declaration({ on_list = on_list }) + end, { buffer = bufnr, desc = "declaration" }) + end, + ["textDocument/definition"] = function(bufnr) + vim.keymap.set("n", "gd", function() + vim.lsp.buf.definition({ on_list = on_list }) + end, { buffer = bufnr, desc = "definition" }) + end, + ["textDocument/typeDefinition"] = function(bufnr) + vim.keymap.set("n", "go", function() + vim.lsp.buf.type_definition({ on_list = on_list }) + end, { buffer = bufnr, desc = "type definition" }) + end, + ["textDocument/implementation"] = function(bufnr) + vim.keymap.set("n", "gi", function() + vim.lsp.buf.implementation({ on_list = on_list }) + end, { buffer = bufnr, desc = "implementation" }) + end, + ["textDocument/inlayHint"] = function(bufnr) + vim.lsp.inlay_hint(bufnr, true) + end, + ["textDocument/references"] = function(bufnr) + vim.keymap.set("n", "gr", function() + vim.lsp.buf.references(nil, { on_list = on_list }) + end, { buffer = bufnr, desc = "references" }) + end, + ["textDocument/rename"] = function(bufnr) + vim.keymap.set("n", "lr", vim.lsp.buf.rename, { + buffer = bufnr, + desc = "rename", + }) + end, + ["textDocument/codeAction"] = function(bufnr) + vim.keymap.set("n", "la", vim.lsp.buf.code_action, { + buffer = bufnr, + desc = "code action", + }) + end, + ["experimental/externalDocs"] = function(bufnr) + vim.keymap.set("n", "gx", vim.lsp.buf.external_docs, { + buffer = bufnr, + desc = "external_docs", + }) + end, +} + +return M diff --git a/nvim/.config/nvim/lua/tobyvin/lsp/handlers.lua b/nvim/.config/nvim/lua/tobyvin/lsp/handlers.lua index a095d43..0e5b7d6 100644 --- a/nvim/.config/nvim/lua/tobyvin/lsp/handlers.lua +++ b/nvim/.config/nvim/lua/tobyvin/lsp/handlers.lua @@ -1,17 +1,15 @@ +local ms = vim.lsp.protocol.Methods + local M = { - ["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, { + [ms.textDocument_hover] = vim.lsp.with(vim.lsp.handlers.hover, { border = "single", }), - ["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, { + [ms.textDocument_signatureHelp] = vim.lsp.with(vim.lsp.handlers.signature_help, { border = "single", }), ["experimental/externalDocs"] = function(_, url) if url then - if vim.fn.executable("xdg-open") == 1 then - require("plenary.job"):new({ command = "xdg-open", args = { url } }):start() - else - pcall(vim.fn["netrw#BrowseX"], url, 0) - end + vim.ui.open(url) end end, } diff --git a/nvim/.config/nvim/lua/tobyvin/options.lua b/nvim/.config/nvim/lua/tobyvin/options.lua index c4a0d99..ad19ffd 100644 --- a/nvim/.config/nvim/lua/tobyvin/options.lua +++ b/nvim/.config/nvim/lua/tobyvin/options.lua @@ -30,6 +30,7 @@ vim.opt.showbreak = string.rep(" ", 3) vim.opt.signcolumn = "yes:1" vim.opt.smartcase = true vim.opt.smartindent = true +vim.opt.smoothscroll = true vim.opt.spelloptions = { "camel" } vim.opt.splitbelow = true vim.opt.splitright = true diff --git a/nvim/.config/nvim/lua/tobyvin/utils/dap.lua b/nvim/.config/nvim/lua/tobyvin/utils/dap.lua index 85bbf83..69a7bb2 100644 --- a/nvim/.config/nvim/lua/tobyvin/utils/dap.lua +++ b/nvim/.config/nvim/lua/tobyvin/utils/dap.lua @@ -5,7 +5,7 @@ function M.cargo_inspector(config) -- Create a buffer to receive compiler progress messages local compiler_msg_buf = vim.api.nvim_create_buf(false, true) - vim.api.nvim_buf_set_option(compiler_msg_buf, "buftype", "nofile") + vim.bo[compiler_msg_buf].buftype = "nofile" -- And a floating window in the corner to display those messages local window_width = math.max(#final_config.name + 1, 50) @@ -14,8 +14,8 @@ function M.cargo_inspector(config) relative = "editor", width = window_width, height = window_height, - col = vim.api.nvim_get_option("columns") - window_width - 1, - row = vim.api.nvim_get_option("lines") - window_height - 1, + col = vim.wo.columns:get() - window_width - 1, + row = vim.wo.lines:get() - window_height - 1, border = "rounded", style = "minimal", }) diff --git a/nvim/.config/nvim/lua/tobyvin/utils/dashboard.lua b/nvim/.config/nvim/lua/tobyvin/utils/dashboard.lua index b128baf..e794b95 100644 --- a/nvim/.config/nvim/lua/tobyvin/utils/dashboard.lua +++ b/nvim/.config/nvim/lua/tobyvin/utils/dashboard.lua @@ -36,14 +36,27 @@ local M = { return {} end - local Job = require("plenary.job") - local job = Job:new({ command = "fortune", args = { "-s" } }) + local opts = { + text = true, + timeout = 30, + } + local cowsay if vim.fn.executable("cowsay") == 1 then - job = Job:new({ command = "cowsay", writer = job }) + cowsay = vim.system({ "cowsay" }, { text = true, stdin = true }) + opts.stdout = function(_, data) + cowsay:write(data) + end + end + + local stdout = vim.system({ "fortune", "-s" }, opts):wait().stdout + + if cowsay then + cowsay:write(nil) + stdout = cowsay:wait().stdout end - return job:sync() + return vim.split(stdout or "", "\n") end, { " ███╗ ██╗███████╗ ██████╗ ██╗ ██╗██╗███╗ ███╗ ", -- cgit v1.2.3-70-g09d2