feat(forge): support custom shorthand prefixes
Problem: forge shorthand parsing hardcoded `%l%l` (exactly 2 lowercase letters), preventing custom prefixes like `github:`. Completions also hardcoded `gh:`, `gl:`, `cb:` patterns. Solution: iterate `_by_shorthand` keys dynamically in `_parse_shorthand` instead of matching a fixed pattern. Build completion patterns from `forge.backends()`. Add `shorthand` field to `ForgeInstanceConfig` so users can override prefixes via config, applied in `_ensure_instances()`. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
e62f2f818c
commit
61eadec87e
4 changed files with 106 additions and 8 deletions
|
|
@ -62,6 +62,14 @@ function M.backends()
|
|||
return _backends
|
||||
end
|
||||
|
||||
function M._reset_instances()
|
||||
_instances_resolved = false
|
||||
_by_shorthand = {}
|
||||
for _, b in ipairs(_backends) do
|
||||
_by_shorthand[b.shorthand] = b
|
||||
end
|
||||
end
|
||||
|
||||
local function _ensure_instances()
|
||||
if _instances_resolved then
|
||||
return
|
||||
|
|
@ -73,17 +81,27 @@ local function _ensure_instances()
|
|||
for _, inst in ipairs(forge_cfg.instances or {}) do
|
||||
_by_host[inst] = backend
|
||||
end
|
||||
if forge_cfg.shorthand and forge_cfg.shorthand ~= backend.shorthand then
|
||||
_by_shorthand[backend.shorthand] = nil
|
||||
backend.shorthand = forge_cfg.shorthand
|
||||
_by_shorthand[backend.shorthand] = backend
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---@param token string
|
||||
---@return pending.ForgeRef?
|
||||
function M._parse_shorthand(token)
|
||||
local prefix, rest = token:match('^(%l%l):(.+)$')
|
||||
if not prefix then
|
||||
return nil
|
||||
_ensure_instances()
|
||||
local backend, rest
|
||||
for prefix, b in pairs(_by_shorthand) do
|
||||
local candidate = token:match('^' .. vim.pesc(prefix) .. ':(.+)$')
|
||||
if candidate then
|
||||
backend = b
|
||||
rest = candidate
|
||||
break
|
||||
end
|
||||
end
|
||||
local backend = _by_shorthand[prefix]
|
||||
if not backend then
|
||||
return nil
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue