Skip to content

Commit 61ace22

Browse files
committed
feat(config): add hide_merge_artifacts option
Filter out common merge artifact files (*.orig, *.BACKUP.*, *.BASE.*, *.LOCAL.*, *.REMOTE.*) from file listings when the option is enabled.
1 parent cd8e3cc commit 61ace22

3 files changed

Lines changed: 46 additions & 0 deletions

File tree

doc/diffview_defaults.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ DEFAULT CONFIG *diffview.defaults*
1010
use_icons = true, -- Requires nvim-web-devicons or mini.icons
1111
show_help_hints = true, -- Show hints for how to open the help panel
1212
watch_index = true, -- Update views and index buffers when the git index changes.
13+
hide_merge_artifacts = false, -- Hide merge artifact files (*.orig, *.BACKUP.*, *.BASE.*, *.LOCAL.*, *.REMOTE.*)
1314
icons = { -- Only applies when use_icons is true.
1415
folder_closed = "",
1516
folder_open = "",

lua/diffview/config.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ M.defaults = {
4444
use_icons = true,
4545
show_help_hints = true,
4646
watch_index = true,
47+
hide_merge_artifacts = false, -- Hide merge artifact files (*.orig, *.BACKUP.*, etc.)
4748
icons = {
4849
folder_closed = "",
4950
folder_open = "",

lua/diffview/vcs/utils.lua

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,47 @@ local await = async.await
1111
local fmt = string.format
1212
local logger = DiffviewGlobal.logger
1313

14+
local config = require("diffview.config")
15+
1416
local M = {}
1517

18+
-- Patterns for merge artifact files.
19+
local merge_artifact_patterns = {
20+
"%.orig$",
21+
"%.BACKUP%.",
22+
"%.BASE%.",
23+
"%.LOCAL%.",
24+
"%.REMOTE%.",
25+
}
26+
27+
---Check if a file path matches a merge artifact pattern.
28+
---@param path string
29+
---@return boolean
30+
function M.is_merge_artifact(path)
31+
for _, pattern in ipairs(merge_artifact_patterns) do
32+
if path:match(pattern) then
33+
return true
34+
end
35+
end
36+
return false
37+
end
38+
39+
---Filter out merge artifacts from a file list if configured.
40+
---@param files FileEntry[]
41+
---@return FileEntry[]
42+
function M.filter_merge_artifacts(files)
43+
if not config.get_config().hide_merge_artifacts then
44+
return files
45+
end
46+
local result = {}
47+
for _, file in ipairs(files) do
48+
if not M.is_merge_artifact(file.path) then
49+
result[#result + 1] = file
50+
end
51+
end
52+
return result
53+
end
54+
1655
---@enum JobStatus
1756
local JobStatus = oop.enum({
1857
SUCCESS = 1,
@@ -140,6 +179,11 @@ M.diff_file_list = async.wrap(function(adapter, left, right, path_args, dv_opt,
140179
return
141180
end
142181

182+
-- Filter out merge artifacts if configured.
183+
files:set_working(M.filter_merge_artifacts(files.working))
184+
files:set_conflicting(M.filter_merge_artifacts(files.conflicting))
185+
files:set_staged(M.filter_merge_artifacts(files.staged))
186+
143187
files:update_file_trees()
144188
callback(nil, files)
145189
end, 7)

0 commit comments

Comments
 (0)