feat: add Neovim agent review workflow
This commit is contained in:
1 parent
3bfb233614
commit
81dc673ac2
4 files changed
+81
No files matched your search
@@ -174,6 +174,7 @@ in
|
|||||||
render-markdown-nvim
|
render-markdown-nvim
|
||||||
lualine-nvim
|
lualine-nvim
|
||||||
gitsigns-nvim
|
gitsigns-nvim
|
||||||
|
diffview-nvim
|
||||||
zen-mode-nvim
|
zen-mode-nvim
|
||||||
which-key-nvim
|
which-key-nvim
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,3 +1,9 @@
|
|||||||
|
vim.api.nvim_create_autocmd({ "FocusGained", "BufEnter", "TermLeave" }, {
|
||||||
|
desc = "Reload externally changed files without discarding unsaved edits",
|
||||||
|
group = vim.api.nvim_create_augroup("lux-checktime", { clear = true }),
|
||||||
|
command = "checktime",
|
||||||
|
})
|
||||||
|
|
||||||
vim.api.nvim_create_autocmd("TextYankPost", {
|
vim.api.nvim_create_autocmd("TextYankPost", {
|
||||||
desc = "Highlight yanked text",
|
desc = "Highlight yanked text",
|
||||||
group = vim.api.nvim_create_augroup("lux-highlight-yank", { clear = true }),
|
group = vim.api.nvim_create_augroup("lux-highlight-yank", { clear = true }),
|
||||||
|
|||||||
@@ -74,10 +74,30 @@ require("lz.n").load({
|
|||||||
end
|
end
|
||||||
map_hunk("]h", "next", "Next git hunk")
|
map_hunk("]h", "next", "Next git hunk")
|
||||||
map_hunk("[h", "prev", "Previous git hunk")
|
map_hunk("[h", "prev", "Previous git hunk")
|
||||||
|
vim.keymap.set("n", "<leader>gp", gs.preview_hunk, { buffer = bufnr, desc = "Preview git hunk" })
|
||||||
|
vim.keymap.set("n", "<leader>gs", gs.stage_hunk, { buffer = bufnr, desc = "Stage git hunk" })
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"diffview.nvim",
|
||||||
|
cmd = { "DiffviewOpen", "DiffviewClose", "DiffviewRefresh", "DiffviewFileHistory" },
|
||||||
|
keys = {
|
||||||
|
{
|
||||||
|
"<leader>gd",
|
||||||
|
function()
|
||||||
|
vim.cmd("DiffviewOpen -C" .. vim.fn.fnameescape(require("project").root()))
|
||||||
|
end,
|
||||||
|
desc = "Review project changes",
|
||||||
|
},
|
||||||
|
{ "<leader>gq", "<cmd>DiffviewClose<cr>", desc = "Close git review" },
|
||||||
|
{ "<leader>gr", "<cmd>DiffviewRefresh<cr>", desc = "Refresh git review" },
|
||||||
|
},
|
||||||
|
after = function()
|
||||||
|
require("diffview").setup({})
|
||||||
|
end,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"zen-mode.nvim",
|
"zen-mode.nvim",
|
||||||
cmd = "ZenMode",
|
cmd = "ZenMode",
|
||||||
@@ -108,6 +128,7 @@ require("lz.n").load({
|
|||||||
{ "<leader>b", group = "Buffers" },
|
{ "<leader>b", group = "Buffers" },
|
||||||
{ "<leader>c", group = "Code" },
|
{ "<leader>c", group = "Code" },
|
||||||
{ "<leader>d", group = "Diagnostics" },
|
{ "<leader>d", group = "Diagnostics" },
|
||||||
|
{ "<leader>g", group = "Git" },
|
||||||
{ "<leader>n", group = "Notes" },
|
{ "<leader>n", group = "Notes" },
|
||||||
{ "<leader>q", group = "Database" },
|
{ "<leader>q", group = "Database" },
|
||||||
{ "<leader>r", group = "HTTP" },
|
{ "<leader>r", group = "HTTP" },
|
||||||
|
|||||||
@@ -0,0 +1,53 @@
|
|||||||
|
-- Run with the configured Neovim, using the same headless invocation as neovim-ergonomics.lua.
|
||||||
|
assert(package.loaded["diffview"] == nil, "Diffview should load on demand")
|
||||||
|
vim.cmd("doautocmd VimEnter")
|
||||||
|
local root = vim.fn.tempname() .. " review"
|
||||||
|
vim.fn.mkdir(root, "p")
|
||||||
|
local function git(...)
|
||||||
|
local result = vim.system({ "git", "-C", root, ... }, { text = true }):wait()
|
||||||
|
assert(result.code == 0, result.stderr)
|
||||||
|
end
|
||||||
|
local file = root .. "/tracked.txt"
|
||||||
|
git("init", "--quiet")
|
||||||
|
vim.fn.writefile({ "original" }, file)
|
||||||
|
git("add", ".")
|
||||||
|
git("-c", "user.name=Review Test", "-c", "[email protected]", "commit", "--quiet", "-m", "Baseline")
|
||||||
|
vim.cmd.edit(vim.fn.fnameescape(file))
|
||||||
|
assert(
|
||||||
|
vim.wait(5000, function()
|
||||||
|
return vim.fn.maparg(" gs", "n") ~= ""
|
||||||
|
end),
|
||||||
|
"Gitsigns should attach to the tracked file"
|
||||||
|
)
|
||||||
|
|
||||||
|
vim.fn.writefile({ "staged change" }, file)
|
||||||
|
git("add", "tracked.txt")
|
||||||
|
vim.fn.writefile({ "unstaged change after staging" }, file)
|
||||||
|
vim.fn.writefile({ "new file" }, root .. "/untracked.txt")
|
||||||
|
vim.api.nvim_exec_autocmds("FocusGained", { modeline = false })
|
||||||
|
vim.api.nvim_feedkeys(" gd", "xt", false)
|
||||||
|
assert(package.loaded["diffview"] ~= nil, "Review shortcut should load Diffview")
|
||||||
|
local view = require("diffview.lib").get_current_view()
|
||||||
|
assert(view, "Review shortcut should open a view even when cwd is outside the repository")
|
||||||
|
assert(
|
||||||
|
vim.wait(5000, function()
|
||||||
|
return #view.files.working == 2 and #view.files.staged == 1 and view.cur_entry and view.cur_entry.opened
|
||||||
|
end),
|
||||||
|
"Review should include the tracked and untracked files"
|
||||||
|
)
|
||||||
|
local refreshed = false
|
||||||
|
view.emitter:on("file_open_post", function()
|
||||||
|
refreshed = true
|
||||||
|
end)
|
||||||
|
vim.cmd("DiffviewRefresh")
|
||||||
|
assert(
|
||||||
|
vim.wait(5000, function()
|
||||||
|
return refreshed
|
||||||
|
end),
|
||||||
|
"Refresh should finish before closing the view"
|
||||||
|
)
|
||||||
|
vim.cmd("DiffviewClose")
|
||||||
|
assert(require("diffview.lib").get_current_view() == nil)
|
||||||
|
vim.cmd("%bwipeout!")
|
||||||
|
vim.fn.delete(root, "rf")
|
||||||
|
print("Neovim agent review smoke check passed")
|
||||||
Reference in new issue
Block a user