Revert "feat(views): add hide_done_categories config option (#153)"

This reverts commit 283f93eda1.
This commit is contained in:
Barrett Ruth 2026-03-12 20:41:32 -04:00 committed by Barrett Ruth
parent 7c0ba178d0
commit e6816d13ef
6 changed files with 4 additions and 123 deletions

View file

@ -882,16 +882,6 @@ Fields: ~
`false` uses Vim's built-in foldtext. `false` uses Vim's built-in foldtext.
Folds only apply to category view. Folds only apply to category view.
{hide_done_categories}
(boolean, default: false)
When true, categories where every task is
done (or deleted) are hidden from the
rendered buffer. The tasks remain in the
store and reappear when any task in the
category is un-done or a new pending task
is added. Hidden tasks are protected from
deletion on `:w`.
{queue} (table) *pending.QueueViewConfig* {queue} (table) *pending.QueueViewConfig*
Queue (priority) view settings. Queue (priority) view settings.
{sort} (string[], default: {sort} (string[], default:

View file

@ -27,8 +27,6 @@ local _filter_predicates = {}
---@type table<integer, true> ---@type table<integer, true>
local _hidden_ids = {} local _hidden_ids = {}
---@type table<integer, true> ---@type table<integer, true>
local _done_cat_hidden_ids = {}
---@type table<integer, true>
local _dirty_rows = {} local _dirty_rows = {}
---@type boolean ---@type boolean
local _on_bytes_active = false local _on_bytes_active = false
@ -76,11 +74,6 @@ function M.hidden_ids()
return _hidden_ids return _hidden_ids
end end
---@return table<integer, true>
function M.done_cat_hidden_ids()
return _done_cat_hidden_ids
end
---@param predicates string[] ---@param predicates string[]
---@param hidden table<integer, true> ---@param hidden table<integer, true>
---@return nil ---@return nil
@ -701,13 +694,10 @@ function M.render(bufnr)
end end
local lines, line_meta local lines, line_meta
_done_cat_hidden_ids = {}
if current_view == 'priority' then if current_view == 'priority' then
lines, line_meta = views.priority_view(tasks) lines, line_meta = views.priority_view(tasks)
else else
local done_cat_hidden lines, line_meta = views.category_view(tasks)
lines, line_meta, done_cat_hidden = views.category_view(tasks)
_done_cat_hidden_ids = done_cat_hidden
end end
if #lines == 0 and #_filter_predicates == 0 then if #lines == 0 and #_filter_predicates == 0 then

View file

@ -84,7 +84,6 @@
---@class pending.CategoryViewConfig ---@class pending.CategoryViewConfig
---@field order? string[] ---@field order? string[]
---@field folding? boolean|pending.FoldingConfig ---@field folding? boolean|pending.FoldingConfig
---@field hide_done_categories? boolean
---@class pending.QueueViewConfig ---@class pending.QueueViewConfig
---@field sort? string[] ---@field sort? string[]
@ -132,7 +131,6 @@ local defaults = {
category = { category = {
order = {}, order = {},
folding = true, folding = true,
hide_done_categories = false,
}, },
queue = { queue = {
sort = { 'status', 'priority', 'due', 'order', 'id' }, sort = { 'status', 'priority', 'due', 'order', 'id' },

View file

@ -513,9 +513,6 @@ function M._on_write(bufnr)
if #stack > UNDO_MAX then if #stack > UNDO_MAX then
table.remove(stack, 1) table.remove(stack, 1)
end end
for id in pairs(buffer.done_cat_hidden_ids()) do
hidden[id] = true
end
local new_refs = diff.apply(lines, s, hidden) local new_refs = diff.apply(lines, s, hidden)
M._recompute_counts() M._recompute_counts()
buffer.render(bufnr) buffer.render(bufnr)

View file

@ -189,7 +189,6 @@ end
---@param tasks pending.Task[] ---@param tasks pending.Task[]
---@return string[] lines ---@return string[] lines
---@return pending.LineMeta[] meta ---@return pending.LineMeta[] meta
---@return table<integer, true> done_cat_hidden_ids
function M.category_view(tasks) function M.category_view(tasks)
local by_cat = {} local by_cat = {}
local cat_order = {} local cat_order = {}
@ -229,9 +228,6 @@ function M.category_view(tasks)
cat_order = ordered cat_order = ordered
end end
local hide_done = config.get().view.category.hide_done_categories
local done_cat_hidden = {} ---@type table<integer, true>
for _, cat in ipairs(cat_order) do for _, cat in ipairs(cat_order) do
sort_tasks(by_cat[cat]) sort_tasks(by_cat[cat])
sort_tasks(done_by_cat[cat]) sort_tasks(done_by_cat[cat])
@ -239,21 +235,12 @@ function M.category_view(tasks)
local lines = {} local lines = {}
local meta = {} local meta = {}
local rendered = 0
for _, cat in ipairs(cat_order) do for i, cat in ipairs(cat_order) do
if hide_done and #by_cat[cat] == 0 and #done_by_cat[cat] > 0 then if i > 1 then
for _, t in ipairs(done_by_cat[cat]) do
done_cat_hidden[t.id] = true
end
goto next_cat
end
if rendered > 0 then
table.insert(lines, '') table.insert(lines, '')
table.insert(meta, { type = 'blank' }) table.insert(meta, { type = 'blank' })
end end
rendered = rendered + 1
table.insert(lines, '# ' .. cat) table.insert(lines, '# ' .. cat)
table.insert(meta, { type = 'header', category = cat }) table.insert(meta, { type = 'header', category = cat })
@ -284,11 +271,9 @@ function M.category_view(tasks)
forge_spans = compute_forge_spans(task, prefix_len), forge_spans = compute_forge_spans(task, prefix_len),
}) })
end end
::next_cat::
end end
return lines, meta, done_cat_hidden return lines, meta
end end
---@param tasks pending.Task[] ---@param tasks pending.Task[]

View file

@ -280,85 +280,6 @@ describe('views', function()
assert.are.equal('# Alpha', headers[1]) assert.are.equal('# Alpha', headers[1])
assert.are.equal('# Beta', headers[2]) assert.are.equal('# Beta', headers[2])
end) end)
it('returns empty done_cat_hidden_ids when hide_done_categories is false', function()
local t1 = s:add({ description = 'Done task', category = 'Work' })
s:update(t1.id, { status = 'done' })
s:add({ description = 'Active', category = 'Personal' })
local _, _, done_hidden = views.category_view(s:active_tasks())
assert.are.same({}, done_hidden)
end)
it('hides categories with only done tasks when hide_done_categories is true', function()
vim.g.pending = {
data_path = tmpdir .. '/tasks.json',
view = { category = { hide_done_categories = true } },
}
config.reset()
local t1 = s:add({ description = 'Done task', category = 'Work' })
s:update(t1.id, { status = 'done' })
s:add({ description = 'Active', category = 'Personal' })
local lines, meta, done_hidden = views.category_view(s:active_tasks())
local headers = {}
for i, m in ipairs(meta) do
if m.type == 'header' then
table.insert(headers, lines[i])
end
end
assert.are.equal(1, #headers)
assert.are.equal('# Personal', headers[1])
assert.are.same({ [t1.id] = true }, done_hidden)
end)
it('shows categories with a mix of done and pending tasks', function()
vim.g.pending = {
data_path = tmpdir .. '/tasks.json',
view = { category = { hide_done_categories = true } },
}
config.reset()
local t1 = s:add({ description = 'Done task', category = 'Work' })
s:update(t1.id, { status = 'done' })
s:add({ description = 'Active task', category = 'Work' })
local lines, meta, done_hidden = views.category_view(s:active_tasks())
local headers = {}
for i, m in ipairs(meta) do
if m.type == 'header' then
table.insert(headers, lines[i])
end
end
assert.are.equal(1, #headers)
assert.are.equal('# Work', headers[1])
assert.are.same({}, done_hidden)
end)
it('does not insert leading blank line when first category is hidden', function()
vim.g.pending = {
data_path = tmpdir .. '/tasks.json',
view = { category = { hide_done_categories = true } },
}
config.reset()
local t1 = s:add({ description = 'Done task', category = 'Alpha' })
s:update(t1.id, { status = 'done' })
s:add({ description = 'Active', category = 'Beta' })
local lines, meta = views.category_view(s:active_tasks())
assert.are.equal('header', meta[1].type)
assert.are.equal('# Beta', lines[1])
end)
it('returns all done task ids from hidden categories', function()
vim.g.pending = {
data_path = tmpdir .. '/tasks.json',
view = { category = { hide_done_categories = true } },
}
config.reset()
local t1 = s:add({ description = 'Done A', category = 'Work' })
local t2 = s:add({ description = 'Done B', category = 'Work' })
s:update(t1.id, { status = 'done' })
s:update(t2.id, { status = 'done' })
s:add({ description = 'Active', category = 'Personal' })
local _, _, done_hidden = views.category_view(s:active_tasks())
assert.are.same({ [t1.id] = true, [t2.id] = true }, done_hidden)
end)
end) end)
describe('priority_view', function() describe('priority_view', function()