feat(diff): propagate recurrence through buffer reconciliation

Problem: the diff layer does not extract or apply recurrence fields,
so rec: tokens written in the buffer are silently ignored on :w.

Solution: add rec and rec_mode to ParsedEntry, extract them in
parse_buffer(), and pass them through create and update paths in
apply().
This commit is contained in:
Barrett Ruth 2026-02-25 13:03:58 -05:00
parent e19cfdda18
commit 597ec6bb2a
2 changed files with 89 additions and 0 deletions

View file

@ -10,6 +10,8 @@ local store = require('pending.store')
---@field status? string
---@field category? string
---@field due? string
---@field rec? string
---@field rec_mode? string
---@field lnum integer
---@class pending.diff
@ -48,6 +50,8 @@ function M.parse_buffer(lines)
status = status,
category = metadata.cat or current_category or config.get().default_category,
due = metadata.due,
rec = metadata.rec,
rec_mode = metadata.rec_mode,
lnum = i,
})
end
@ -90,6 +94,8 @@ function M.apply(lines)
category = entry.category,
priority = entry.priority,
due = entry.due,
recur = entry.rec,
recur_mode = entry.rec_mode,
order = order_counter,
})
else
@ -112,6 +118,14 @@ function M.apply(lines)
task.due = entry.due
changed = true
end
if task.recur ~= entry.rec then
task.recur = entry.rec
changed = true
end
if task.recur_mode ~= entry.rec_mode then
task.recur_mode = entry.rec_mode
changed = true
end
if entry.status and task.status ~= entry.status then
task.status = entry.status
if entry.status == 'done' then
@ -135,6 +149,8 @@ function M.apply(lines)
category = entry.category,
priority = entry.priority,
due = entry.due,
recur = entry.rec,
recur_mode = entry.rec_mode,
order = order_counter,
})
end