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
287a4e32e3
commit
b131d6d391
16 changed files with 144 additions and 80 deletions
|
|
@ -1,17 +1,21 @@
|
|||
local config = require('pending.config')
|
||||
local log = require('pending.log')
|
||||
|
||||
---@alias pending.ForgeType 'issue'|'pull_request'|'merge_request'|'repo'
|
||||
---@alias pending.ForgeState 'open'|'closed'|'merged'
|
||||
---@alias pending.ForgeAuthStatus 'unknown'|'ok'|'failed'
|
||||
|
||||
---@class pending.ForgeRef
|
||||
---@field forge string
|
||||
---@field owner string
|
||||
---@field repo string
|
||||
---@field type 'issue'|'pull_request'|'merge_request'|'repo'
|
||||
---@field type pending.ForgeType
|
||||
---@field number? integer
|
||||
---@field url string
|
||||
|
||||
---@class pending.ForgeCache
|
||||
---@field title? string
|
||||
---@field state 'open'|'closed'|'merged'
|
||||
---@field state pending.ForgeState
|
||||
---@field labels? string[]
|
||||
---@field fetched_at string
|
||||
|
||||
|
|
@ -27,10 +31,10 @@ local log = require('pending.log')
|
|||
---@field auth_status_args string[]
|
||||
---@field default_icon string
|
||||
---@field default_issue_format string
|
||||
---@field _auth? 'unknown'|'ok'|'failed'
|
||||
---@field _auth? pending.ForgeAuthStatus
|
||||
---@field parse_url fun(self: pending.ForgeBackend, url: string): pending.ForgeRef?
|
||||
---@field api_args fun(self: pending.ForgeBackend, ref: pending.ForgeRef): string[]
|
||||
---@field parse_state fun(self: pending.ForgeBackend, decoded: table): 'open'|'closed'|'merged'
|
||||
---@field parse_state fun(self: pending.ForgeBackend, decoded: table): pending.ForgeState
|
||||
|
||||
---@class pending.forge
|
||||
local M = {}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue