fix: simplifies highlights complex code (#1291)
This commit is contained in:
@@ -260,10 +260,9 @@ M._defaults = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
highlights = {
|
highlights = {
|
||||||
---@type AvanteConflictHighlights
|
|
||||||
diff = {
|
diff = {
|
||||||
current = "DiffText",
|
current = nil,
|
||||||
incoming = "DiffAdd",
|
incoming = nil,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
mappings = {
|
mappings = {
|
||||||
@@ -376,11 +375,6 @@ M._defaults = {
|
|||||||
---@type avante.Config
|
---@type avante.Config
|
||||||
M._options = {}
|
M._options = {}
|
||||||
|
|
||||||
---@class avante.ConflictConfig: AvanteConflictConfig
|
|
||||||
---@field mappings AvanteConflictMappings
|
|
||||||
---@field highlights AvanteConflictHighlights
|
|
||||||
M.diff = {}
|
|
||||||
|
|
||||||
---@type Provider[]
|
---@type Provider[]
|
||||||
M.providers = {}
|
M.providers = {}
|
||||||
|
|
||||||
@@ -412,13 +406,6 @@ function M.setup(opts)
|
|||||||
|
|
||||||
vim.validate({ provider = { M._options.provider, "string", false } })
|
vim.validate({ provider = { M._options.provider, "string", false } })
|
||||||
|
|
||||||
M.diff = vim.tbl_deep_extend(
|
|
||||||
"force",
|
|
||||||
{},
|
|
||||||
M._options.diff,
|
|
||||||
{ mappings = M._options.mappings.diff, highlights = M._options.highlights.diff }
|
|
||||||
)
|
|
||||||
|
|
||||||
if next(M._options.vendors) ~= nil then
|
if next(M._options.vendors) ~= nil then
|
||||||
for k, v in pairs(M._options.vendors) do
|
for k, v in pairs(M._options.vendors) do
|
||||||
M._options.vendors[k] = type(v) == "function" and v() or v
|
M._options.vendors[k] = type(v) == "function" and v() or v
|
||||||
@@ -433,12 +420,6 @@ function M.override(opts)
|
|||||||
vim.validate({ opts = { opts, "table", true } })
|
vim.validate({ opts = { opts, "table", true } })
|
||||||
|
|
||||||
M._options = vim.tbl_deep_extend("force", M._options, opts or {})
|
M._options = vim.tbl_deep_extend("force", M._options, opts or {})
|
||||||
M.diff = vim.tbl_deep_extend(
|
|
||||||
"force",
|
|
||||||
{},
|
|
||||||
M._options.diff,
|
|
||||||
{ mappings = M._options.mappings.diff, highlights = M._options.highlights.diff }
|
|
||||||
)
|
|
||||||
|
|
||||||
if next(M._options.vendors) ~= nil then
|
if next(M._options.vendors) ~= nil then
|
||||||
for k, v in pairs(M._options.vendors) do
|
for k, v in pairs(M._options.vendors) do
|
||||||
|
|||||||
@@ -283,12 +283,12 @@ local function register_cursor_move_events(bufnr)
|
|||||||
|
|
||||||
local hint = string.format(
|
local hint = string.format(
|
||||||
"[<%s>: OURS, <%s>: THEIRS, <%s>: CURSOR, <%s>: ALL THEIRS, <%s>: PREV, <%s>: NEXT]",
|
"[<%s>: OURS, <%s>: THEIRS, <%s>: CURSOR, <%s>: ALL THEIRS, <%s>: PREV, <%s>: NEXT]",
|
||||||
Config.diff.mappings.ours,
|
Config.mappings.diff.ours,
|
||||||
Config.diff.mappings.theirs,
|
Config.mappings.diff.theirs,
|
||||||
Config.diff.mappings.cursor,
|
Config.mappings.diff.cursor,
|
||||||
Config.diff.mappings.all_theirs,
|
Config.mappings.diff.all_theirs,
|
||||||
Config.diff.mappings.prev,
|
Config.mappings.diff.prev,
|
||||||
Config.diff.mappings.next
|
Config.mappings.diff.next
|
||||||
)
|
)
|
||||||
|
|
||||||
show_keybinding_hint_extmark_id = api.nvim_buf_set_extmark(bufnr, KEYBINDING_NAMESPACE, lnum - 1, -1, {
|
show_keybinding_hint_extmark_id = api.nvim_buf_set_extmark(bufnr, KEYBINDING_NAMESPACE, lnum - 1, -1, {
|
||||||
@@ -355,18 +355,18 @@ H.setup_buffer_mappings = function(bufnr)
|
|||||||
---@param desc string
|
---@param desc string
|
||||||
local function opts(desc) return { silent = true, buffer = bufnr, desc = "avante(conflict): " .. desc } end
|
local function opts(desc) return { silent = true, buffer = bufnr, desc = "avante(conflict): " .. desc } end
|
||||||
|
|
||||||
vim.keymap.set({ "n", "v" }, Config.diff.mappings.ours, function() M.choose("ours") end, opts("choose ours"))
|
vim.keymap.set({ "n", "v" }, Config.mappings.diff.ours, function() M.choose("ours") end, opts("choose ours"))
|
||||||
vim.keymap.set({ "n", "v" }, Config.diff.mappings.both, function() M.choose("both") end, opts("choose both"))
|
vim.keymap.set({ "n", "v" }, Config.mappings.diff.both, function() M.choose("both") end, opts("choose both"))
|
||||||
vim.keymap.set({ "n", "v" }, Config.diff.mappings.theirs, function() M.choose("theirs") end, opts("choose theirs"))
|
vim.keymap.set({ "n", "v" }, Config.mappings.diff.theirs, function() M.choose("theirs") end, opts("choose theirs"))
|
||||||
vim.keymap.set(
|
vim.keymap.set(
|
||||||
{ "n", "v" },
|
{ "n", "v" },
|
||||||
Config.diff.mappings.all_theirs,
|
Config.mappings.diff.all_theirs,
|
||||||
function() M.choose("all_theirs") end,
|
function() M.choose("all_theirs") end,
|
||||||
opts("choose all theirs")
|
opts("choose all theirs")
|
||||||
)
|
)
|
||||||
vim.keymap.set("n", Config.diff.mappings.cursor, function() M.choose("cursor") end, opts("choose under cursor"))
|
vim.keymap.set("n", Config.mappings.diff.cursor, function() M.choose("cursor") end, opts("choose under cursor"))
|
||||||
vim.keymap.set("n", Config.diff.mappings.prev, function() M.find_prev("ours") end, opts("previous conflict"))
|
vim.keymap.set("n", Config.mappings.diff.prev, function() M.find_prev("ours") end, opts("previous conflict"))
|
||||||
vim.keymap.set("n", Config.diff.mappings.next, function() M.find_next("ours") end, opts("next conflict"))
|
vim.keymap.set("n", Config.mappings.diff.next, function() M.find_next("ours") end, opts("next conflict"))
|
||||||
|
|
||||||
vim.b[bufnr].avante_conflict_mappings_set = true
|
vim.b[bufnr].avante_conflict_mappings_set = true
|
||||||
end
|
end
|
||||||
@@ -374,7 +374,7 @@ end
|
|||||||
---@param bufnr integer
|
---@param bufnr integer
|
||||||
H.clear_buffer_mappings = function(bufnr)
|
H.clear_buffer_mappings = function(bufnr)
|
||||||
if not bufnr or not vim.b[bufnr].avante_conflict_mappings_set then return end
|
if not bufnr or not vim.b[bufnr].avante_conflict_mappings_set then return end
|
||||||
for _, mapping in pairs(Config.diff.mappings) do
|
for _, mapping in pairs(Config.mappings.diff) do
|
||||||
if vim.fn.hasmapto(mapping, "n") > 0 then api.nvim_buf_del_keymap(bufnr, "n", mapping) end
|
if vim.fn.hasmapto(mapping, "n") > 0 then api.nvim_buf_del_keymap(bufnr, "n", mapping) end
|
||||||
end
|
end
|
||||||
vim.b[bufnr].avante_conflict_mappings_set = false
|
vim.b[bufnr].avante_conflict_mappings_set = false
|
||||||
|
|||||||
@@ -20,10 +20,10 @@ local Highlights = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Highlights.conflict = {
|
Highlights.conflict = {
|
||||||
CURRENT = { name = "AvanteConflictCurrent", bg = "#562C30", bold = true }, -- #405d7e
|
CURRENT = { name = "AvanteConflictCurrent", bg = "#562C30", bold = true },
|
||||||
CURRENT_LABEL = { name = "AvanteConflictCurrentLabel", link = "CURRENT", shade = 60 },
|
CURRENT_LABEL = { name = "AvanteConflictCurrentLabel", shade_link = "AvanteConflictCurrent", shade = 30 },
|
||||||
INCOMING = { name = "AvanteConflictIncoming", bg = 3229523, bold = true }, -- #314753
|
INCOMING = { name = "AvanteConflictIncoming", bg = 3229523, bold = true }, -- #314753
|
||||||
INCOMING_LABEL = { name = "AvanteConflictIncomingLabel", link = "INCOMING", shade = 60 },
|
INCOMING_LABEL = { name = "AvanteConflictIncomingLabel", shade_link = "AvanteConflictIncoming", shade = 30 },
|
||||||
}
|
}
|
||||||
|
|
||||||
--- helper
|
--- helper
|
||||||
@@ -55,41 +55,59 @@ M.setup = function()
|
|||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
M.conflict_highlights()
|
M.setup_conflict_highlights()
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param opts? AvanteConflictHighlights
|
M.setup_conflict_highlights = function()
|
||||||
M.conflict_highlights = function(opts)
|
local custom_hls = Config.highlights.diff
|
||||||
opts = opts or Config.diff.highlights
|
|
||||||
|
|
||||||
local get_highlights = function(key, hl)
|
local get_bg = function(hl_name)
|
||||||
local cl = api.nvim_get_hl(0, { name = opts[key:lower()] })
|
local hl = api.nvim_get_hl(0, { name = hl_name })
|
||||||
return cl ~= nil and cl or api.nvim_get_hl(0, { name = hl.name })
|
return hl.bg
|
||||||
end
|
end
|
||||||
|
|
||||||
local get_default_colors = function(key, hl)
|
local get_bold = function(hl_name)
|
||||||
--- We will first check for user custom highlight. Then fallback to default name highlight.
|
local hl = api.nvim_get_hl(0, { name = hl_name })
|
||||||
return get_highlights(key, hl).bg or hl.bg
|
return hl.bold
|
||||||
end
|
|
||||||
|
|
||||||
local get_shade = function(hl)
|
|
||||||
local color = get_default_colors(hl.link, Highlights.conflict[hl.link])
|
|
||||||
return H.shade_color(color, hl.shade)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
vim.iter(Highlights.conflict):each(function(key, hl)
|
vim.iter(Highlights.conflict):each(function(key, hl)
|
||||||
if not has_set_colors(hl.name) then
|
--- set none shade linked highlights first
|
||||||
if hl.link ~= nil then
|
if hl.shade_link ~= nil and hl.shade ~= nil then return end
|
||||||
api.nvim_set_hl(0, hl.name, { bg = get_shade(hl), default = true })
|
|
||||||
|
if has_set_colors(hl.name) then return end
|
||||||
|
|
||||||
|
local bg = hl.bg
|
||||||
|
local bold = hl.bold
|
||||||
|
|
||||||
|
local custom_hl_name = custom_hls[key:lower()]
|
||||||
|
if custom_hl_name ~= nil then
|
||||||
|
bg = get_bg(custom_hl_name) or hl.bg
|
||||||
|
bold = get_bold(custom_hl_name) or hl.bold
|
||||||
|
end
|
||||||
|
|
||||||
|
api.nvim_set_hl(0, hl.name, { bg = bg, default = true, bold = bold })
|
||||||
|
end)
|
||||||
|
|
||||||
|
vim.iter(Highlights.conflict):each(function(key, hl)
|
||||||
|
--- only set shade linked highlights
|
||||||
|
if hl.shade_link == nil or hl.shade == nil then return end
|
||||||
|
|
||||||
|
if has_set_colors(hl.name) then return end
|
||||||
|
|
||||||
|
local bg
|
||||||
|
local bold = hl.bold
|
||||||
|
|
||||||
|
local custom_hl_name = custom_hls[key:lower()]
|
||||||
|
if custom_hl_name ~= nil then
|
||||||
|
bg = get_bg(custom_hl_name)
|
||||||
|
bold = get_bold(custom_hl_name) or hl.bold
|
||||||
else
|
else
|
||||||
local bold = get_highlights(key, hl).bold
|
local link_bg = get_bg(hl.shade_link)
|
||||||
api.nvim_set_hl(
|
bg = H.shade_color(link_bg, hl.shade)
|
||||||
0,
|
|
||||||
hl.name,
|
|
||||||
{ bg = get_default_colors(key, hl), default = true, bold = bold ~= nil and bold or hl.bold }
|
|
||||||
)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
api.nvim_set_hl(0, hl.name, { bg = bg, default = true, bold = bold })
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -128,7 +146,7 @@ H.alter = function(attr, percent) return math.floor(attr * (100 + percent) / 100
|
|||||||
---@param percent number
|
---@param percent number
|
||||||
---@return string
|
---@return string
|
||||||
H.shade_color = function(color, percent)
|
H.shade_color = function(color, percent)
|
||||||
percent = vim.opt.background:get() == "light" and percent / 10 or percent
|
percent = vim.opt.background:get() == "light" and percent / 5 or percent
|
||||||
local rgb = H.decode_24bit_rgb(color)
|
local rgb = H.decode_24bit_rgb(color)
|
||||||
if not rgb.r or not rgb.g or not rgb.b then return "NONE" end
|
if not rgb.r or not rgb.g or not rgb.b then return "NONE" end
|
||||||
local r, g, b = H.alter(rgb.r, percent), H.alter(rgb.g, percent), H.alter(rgb.b, percent)
|
local r, g, b = H.alter(rgb.r, percent), H.alter(rgb.g, percent), H.alter(rgb.b, percent)
|
||||||
|
|||||||
Reference in New Issue
Block a user