aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--nvim/.config/nvim/lazy-lock.json4
-rw-r--r--nvim/.config/nvim/lua/plugins/ferris.lua15
-rw-r--r--nvim/.config/nvim/lua/plugins/neotest.lua28
-rw-r--r--nvim/.config/nvim/lua/plugins/rust-tools.lua99
-rw-r--r--nvim/.config/nvim/lua/tobyvin/utils.lua23
5 files changed, 69 insertions, 100 deletions
diff --git a/nvim/.config/nvim/lazy-lock.json b/nvim/.config/nvim/lazy-lock.json
index ed77960..db59ac7 100644
--- a/nvim/.config/nvim/lazy-lock.json
+++ b/nvim/.config/nvim/lazy-lock.json
@@ -19,6 +19,7 @@
"conform.nvim": { "branch": "master", "commit": "8f86444d62fc4f012a56732b8fb2c595e1e21fde" },
"dressing.nvim": { "branch": "master", "commit": "c1e1d5fa44fe08811b6ef4aadac2b50e602f9504" },
"efmls-configs-nvim": { "branch": "main", "commit": "265037d589bde340227c60d2ceaaf552a2d83d85" },
+ "ferris.nvim": { "branch": "main", "commit": "2ba71012d108dd630ef33681c767a8462709cd90" },
"git-conflict.nvim": { "branch": "main", "commit": "896261933afe2fddf6fb043d9cd4d88301b151a9" },
"gitsigns.nvim": { "branch": "main", "commit": "bb808fc7376ed7bac0fbe8f47b83d4bf01738167" },
"gruvbox.nvim": { "branch": "main", "commit": "fc2b7df3d8384e1ba32d0c5d515931f5ea366eb1" },
@@ -30,6 +31,8 @@
"mason-update-all": { "branch": "main", "commit": "007a4085fe5e830b9139313652e1553bf1a9b857" },
"mason.nvim": { "branch": "main", "commit": "d66c60e17dd6fd8165194b1d14d21f7eb2c1697a" },
"neodev.nvim": { "branch": "main", "commit": "e9dd1535759794635a951644c183beb327879407" },
+ "neotest": { "branch": "master", "commit": "901891484db3d46ce43d56871273dc7d40621356" },
+ "neotest-rust": { "branch": "main", "commit": "03e036a310379f132d4e39387e9076396132ce3f" },
"noice.nvim": { "branch": "main", "commit": "791c7adda821fd03529f995df2ee284ad591dabd" },
"nui.nvim": { "branch": "main", "commit": "c8de23342caf8d50b15d6b28368d36a56a69d76f" },
"nvim-cmp": { "branch": "main", "commit": "5dce1b778b85c717f6614e3f4da45e9f19f54435" },
@@ -55,7 +58,6 @@
"presence.nvim": { "branch": "main", "commit": "87c857a56b7703f976d3a5ef15967d80508df6e6" },
"pretty-fold.nvim": { "branch": "master", "commit": "a7d8b424abe0eedf50116c460fbe6dfd5783b1d5" },
"refactoring.nvim": { "branch": "master", "commit": "be6505be8bdd306646bb81399312c02927a60a51" },
- "rust-tools.nvim": { "branch": "patched", "commit": "4338a9b08faa8da8b5aad095a035ceff31301e3f" },
"statuscol.nvim": { "branch": "main", "commit": "0944234914438695050eec6f83b4669864680c1a" },
"telescope-dap.nvim": { "branch": "master", "commit": "4e2d5efb92062f0b865fe59b200b5ed7793833bf" },
"telescope-fzf-native.nvim": { "branch": "main", "commit": "6c921ca12321edaa773e324ef64ea301a1d0da62" },
diff --git a/nvim/.config/nvim/lua/plugins/ferris.lua b/nvim/.config/nvim/lua/plugins/ferris.lua
new file mode 100644
index 0000000..0d4b881
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/ferris.lua
@@ -0,0 +1,15 @@
+local utils = require("tobyvin.utils")
+
+---@type LazyPluginSpec
+local M = {
+ "vxpm/ferris.nvim",
+ config = true,
+}
+
+function M:init()
+ utils.on_attach(function()
+ require("ferris")
+ end, { name = "rust_analyzer" })
+end
+
+return M
diff --git a/nvim/.config/nvim/lua/plugins/neotest.lua b/nvim/.config/nvim/lua/plugins/neotest.lua
new file mode 100644
index 0000000..591d802
--- /dev/null
+++ b/nvim/.config/nvim/lua/plugins/neotest.lua
@@ -0,0 +1,28 @@
+local utils = require("tobyvin.utils")
+
+---@type LazyPluginSpec
+local M = {
+ "nvim-neotest/neotest",
+ dependencies = {
+ "nvim-lua/plenary.nvim",
+ "rouge8/neotest-rust",
+ },
+}
+
+function M:init()
+ utils.on_attach(function()
+ vim.keymap.set("n", "<leader>tt", function()
+ require("neotest").run.run()
+ end, { desc = "run nearest test" })
+ end, { name = "rust_analyzer" })
+end
+
+function M:config(opts)
+ opts.adapters = {
+ require("neotest-rust"),
+ }
+
+ require("neotest").setup(opts)
+end
+
+return M
diff --git a/nvim/.config/nvim/lua/plugins/rust-tools.lua b/nvim/.config/nvim/lua/plugins/rust-tools.lua
deleted file mode 100644
index 36d4af4..0000000
--- a/nvim/.config/nvim/lua/plugins/rust-tools.lua
+++ /dev/null
@@ -1,99 +0,0 @@
----@type LazyPluginSpec
-local M = {
- "MunifTanjim/rust-tools.nvim",
- ft = "rust",
- dependencies = {
- "neovim/nvim-lspconfig",
- "nvim-lua/plenary.nvim",
- },
- opts = {
- tools = {
- hover_actions = {
- border = "single",
- },
- },
- server = require("tobyvin.lsp.configs").rust_analyzer,
- dap = { adapter = require("tobyvin.dap.adapters").codelldb },
- },
-}
-
-local function set_target()
- local Job = require("plenary.job")
- local targets = Job:new({
- command = "rustc",
- args = { "--print=target-list" },
- enable_recording = true,
- }):sync()
- table.insert(targets, 1, "default")
-
- vim.ui.select(targets, {}, function(input)
- if not input then
- return
- end
-
- if input == "default" then
- input = nil
- end
-
- ---@diagnostic disable-next-line: assign-type-mismatch
- for _, client in pairs(vim.lsp.get_active_clients({ name = "rust_analyzer" })) do
- client.config.settings["rust-analyzer"].cargo.target = input
- client.notify("workspace/didChangeConfiguration", {
- settings = client.config.settings,
- })
-
- -- TODO: Figure out how to do this without defer, or maybe even reloading.
- -- The workspace seems to need to be reloaded after the notification due to the
- -- [inactive-code] diagnostic, but the request being processed before the
- -- notification is completed, so I can only get it to work by deferring. This is
- -- technically still a race condition?
- vim.defer_fn(function()
- client.request("rust-analyzer/reloadWorkspace", nil, function(err)
- if err then
- error(tostring(err))
- end
- vim.notify("Cargo workspace reloaded")
- end, 0)
- end, 500)
- end
- end)
-end
-
-function M.init()
- require("tobyvin.lsp.configs").rust_analyzer = nil
-
- vim.api.nvim_create_autocmd("LspAttach", {
- group = vim.api.nvim_create_augroup("rust-tools", {}),
- desc = "setup rust-tools",
- callback = function(args)
- if vim.lsp.get_client_by_id(args.data.client_id).name ~= "rust_analyzer" then
- return
- end
-
- vim.api.nvim_create_user_command("RustSetTarget", set_target, { desc = "Set cargo target" })
-
- vim.keymap.set("n", "<leader>dd", require("rust-tools").debuggables.debuggables, {
- desc = "debug",
- buffer = args.buf,
- })
- vim.keymap.set("n", "<leader>dD", require("rust-tools").cached_commands.execute_last_debuggable, {
- desc = "rerun last debug",
- buffer = args.buf,
- })
- vim.keymap.set("n", "<leader>tt", require("rust-tools").runnables.runnables, {
- desc = "test",
- buffer = args.buf,
- })
- vim.keymap.set("n", "<leader>tT", require("rust-tools").cached_commands.execute_last_runnable, {
- desc = "rerun last test",
- buffer = args.buf,
- })
- vim.keymap.set("n", "<leader>le", require("rust-tools").expand_macro.expand_macro, {
- desc = "expand macro",
- buffer = args.buf,
- })
- end,
- })
-end
-
-return M
diff --git a/nvim/.config/nvim/lua/tobyvin/utils.lua b/nvim/.config/nvim/lua/tobyvin/utils.lua
index 82f7a27..79e7c44 100644
--- a/nvim/.config/nvim/lua/tobyvin/utils.lua
+++ b/nvim/.config/nvim/lua/tobyvin/utils.lua
@@ -5,6 +5,29 @@ function M.inspect(v)
return v
end
+---@param on_attach fun(client: lsp.Client, buffer: integer): boolean|nil
+---@param filter vim.lsp.get_clients.filter|nil
+function M.on_attach(on_attach, filter)
+ vim.api.nvim_create_autocmd("LspAttach", {
+ desc = "on client attach",
+ callback = function(args)
+ local bufnr = args.buf ---@type number
+ local client = vim.lsp.get_client_by_id(args.data.client_id)
+ filter = filter or {}
+
+ if
+ client
+ and (filter.id == nil or client.id == filter.id)
+ and (filter.name == nil or client.name == filter.name)
+ and (filter.bufnr == nil or bufnr == filter.bufnr)
+ and (filter.method == nil or client.supports_method(filter.method, { bufnr = bufnr }))
+ then
+ on_attach(client, bufnr)
+ end
+ end,
+ })
+end
+
--- Merges two or more highlights.
---@param ns integer Namespace
---@param name string name of new hl