fix(parse): skip forge refs in right-to-left metadata scan (#142)
Problem: `parse.body()` scans tokens right-to-left and breaks on the first non-metadata token. Forge refs like `gl:a/b#12` halted the scan, preventing metadata tokens to their left (e.g. `due:tomorrow`) from being parsed. Additionally, `diff.parse_buffer()` ignored `metadata.priority` from `+!!` tokens and only used checkbox-derived priority, and priority updates between two non-zero values were silently skipped. Solution: Recognize forge ref tokens via `forge.parse_ref()` during the right-to-left scan and skip past them, re-appending them to the description so `forge.find_refs()` still works. Prefer `metadata.priority` over checkbox priority in `parse_buffer()`, and simplify the priority update condition to catch all value changes.
This commit is contained in:
parent
d26bdcb3a8
commit
79343cac2e
4 changed files with 74 additions and 5 deletions
|
|
@ -110,6 +110,34 @@ describe('parse', function()
|
|||
assert.is_nil(meta.due)
|
||||
assert.truthy(desc:find('due:garbage', 1, true))
|
||||
end)
|
||||
|
||||
it('parses metadata before a forge ref', function()
|
||||
local desc, meta = parse.body('Fix bug due:2026-03-15 gh:user/repo#42')
|
||||
assert.are.equal('2026-03-15', meta.due)
|
||||
assert.truthy(desc:find('gh:user/repo#42', 1, true))
|
||||
assert.truthy(desc:find('Fix bug', 1, true))
|
||||
end)
|
||||
|
||||
it('parses metadata after a forge ref', function()
|
||||
local desc, meta = parse.body('Fix bug gh:user/repo#42 due:2026-03-15')
|
||||
assert.are.equal('2026-03-15', meta.due)
|
||||
assert.truthy(desc:find('gh:user/repo#42', 1, true))
|
||||
assert.truthy(desc:find('Fix bug', 1, true))
|
||||
end)
|
||||
|
||||
it('parses all metadata around forge ref', function()
|
||||
local desc, meta = parse.body('Fix bug due:tomorrow gh:user/repo#42 cat:Work')
|
||||
assert.are.equal(os.date('%Y-%m-%d', os.time() + 86400), meta.due)
|
||||
assert.are.equal('Work', meta.category)
|
||||
assert.truthy(desc:find('gh:user/repo#42', 1, true))
|
||||
end)
|
||||
|
||||
it('parses forge ref between metadata tokens', function()
|
||||
local desc, meta = parse.body('Fix bug cat:Work gl:a/b#12 due:2026-03-15')
|
||||
assert.are.equal('2026-03-15', meta.due)
|
||||
assert.are.equal('Work', meta.category)
|
||||
assert.truthy(desc:find('gl:a/b#12', 1, true))
|
||||
end)
|
||||
end)
|
||||
|
||||
describe('parse.resolve_date', function()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue