lazy.nvim/lua/lazy/view/diff.lua

65 lines
1.6 KiB
Lua

local Util = require("lazy.util")
local M = {}
---@alias LazyDiff {commit:string} | {from:string, to:string}
---@alias LazyDiffFun fun(plugin:LazyPlugin, diff:LazyDiff)
M.handlers = {
---@type LazyDiffFun
browser = function(plugin, diff)
if plugin.url then
local url = plugin.url:gsub("%.git$", "")
if diff.commit then
Util.open(url .. "/commit/" .. diff.commit)
else
Util.open(url .. "/compare/" .. diff.from .. ".." .. diff.to)
end
else
Util.error("No url for " .. plugin.name)
end
end,
---@type LazyDiffFun
["diffview.nvim"] = function(plugin, diff)
local args
if diff.commit then
args = ("-C=%s"):format(plugin.dir) .. " " .. diff.commit .. "^!"
else
args = ("-C=%s"):format(plugin.dir) .. " " .. diff.from .. ".." .. diff.to
end
vim.cmd("DiffviewOpen " .. args)
end,
---@type LazyDiffFun
git = function(plugin, diff)
local cmd = { "git" }
if diff.commit then
cmd[#cmd + 1] = "show"
cmd[#cmd + 1] = diff.commit
else
cmd[#cmd + 1] = "diff"
cmd[#cmd + 1] = diff.from
cmd[#cmd + 1] = diff.to
end
Util.float_cmd(cmd, { cwd = plugin.dir, filetype = "git" })
end,
---@type LazyDiffFun
terminal_git = function(plugin, diff)
local cmd = { "git" }
if diff.commit then
cmd[#cmd + 1] = "show"
cmd[#cmd + 1] = diff.commit
else
cmd[#cmd + 1] = "diff"
cmd[#cmd + 1] = diff.from
cmd[#cmd + 1] = diff.to
end
Util.float_term(cmd, { cwd = plugin.dir, interactive = false, env = { PAGER = "cat" } })
end,
}
return M