refactor: tighten LuaCATS annotations and canonicalize metadata fields (#141)
* refactor: tighten LuaCATS annotations across modules Problem: type annotations repeated inline unions with no aliases, used `table<string, any>` where structured types exist, and had loose `string` where union types should be used. Solution: add `pending.TaskStatus`, `pending.RecurMode`, `pending.TaskExtra`, `pending.ForgeType`, `pending.ForgeState`, `pending.ForgeAuthStatus` aliases and `pending.SyncBackend` interface. Replace inline unions and loose types with the new aliases in `store.lua`, `forge.lua`, `config.lua`, `diff.lua`, `views.lua`, `parse.lua`, `init.lua`, and `oauth.lua`. * refactor: canonicalize internal metadata field names Problem: `pending.Metadata` used shorthand field names (`cat`, `rec`, `rec_mode`) matching user-facing token syntax, coupling internal representation to config. `RecurSpec.from_completion` used a boolean where a `pending.RecurMode` alias exists. `category_syntax` was hardcoded to `'cat'` with no config option. Solution: rename `Metadata` fields to `category`/`recur`/`recur_mode`, add `category_syntax` config option (default `'cat'`), rename `ParsedEntry` fields to match, replace `RecurSpec.from_completion` with `mode: pending.RecurMode`, and restore `[string]` indexer on `pending.ForgeConfig` alongside explicit fields.
This commit is contained in:
parent
46b5d52b60
commit
939251f629
16 changed files with 144 additions and 80 deletions
|
|
@ -136,9 +136,11 @@ function M.omnifunc(findstart, base)
|
|||
local dk = date_key()
|
||||
local rk = recur_key()
|
||||
|
||||
local ck = config.get().category_syntax or 'cat'
|
||||
|
||||
local checks = {
|
||||
{ vim.pesc(dk) .. ':([%S]*)$', dk },
|
||||
{ 'cat:([%S]*)$', 'cat' },
|
||||
{ vim.pesc(ck) .. ':([%S]*)$', ck },
|
||||
{ vim.pesc(rk) .. ':([%S]*)$', rk },
|
||||
}
|
||||
for _, b in ipairs(forge.backends()) do
|
||||
|
|
@ -172,10 +174,10 @@ function M.omnifunc(findstart, base)
|
|||
table.insert(matches, { word = c.word, menu = '[' .. source .. ']', info = c.info })
|
||||
end
|
||||
end
|
||||
elseif source == 'cat' then
|
||||
elseif source == (config.get().category_syntax or 'cat') then
|
||||
for _, c in ipairs(get_categories()) do
|
||||
if base == '' or c:sub(1, #base) == base then
|
||||
table.insert(matches, { word = c, menu = '[cat]' })
|
||||
table.insert(matches, { word = c, menu = '[' .. source .. ']' })
|
||||
end
|
||||
end
|
||||
elseif source == rk then
|
||||
|
|
@ -190,7 +192,7 @@ function M.omnifunc(findstart, base)
|
|||
local seen = {}
|
||||
for _, task in ipairs(s:tasks()) do
|
||||
if task._extra and task._extra._forge_ref then
|
||||
local ref = task._extra._forge_ref
|
||||
local ref = task._extra._forge_ref --[[@as pending.ForgeRef]]
|
||||
local key = ref.owner .. '/' .. ref.repo
|
||||
if not seen[key] then
|
||||
seen[key] = true
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue