Capture completion hints in command metadata

This commit is contained in:
2026-11-03 03:47:23 +00:00
parent 1d193c87fe
commit 0bed76a6f7
6 changed files with 209 additions and 25 deletions

View File

@@ -98,6 +98,8 @@ type FlagMeta struct {
Usage string
// Required reports whether execution requires the flag to be supplied.
Required bool
// Completion describes optional value suggestions.
Completion CompletionHint
}
// ArgumentMeta describes a positional command argument. Its name and usage are
@@ -107,6 +109,8 @@ type ArgumentMeta struct {
Name string
// Usage briefly describes the argument.
Usage string
// Completion describes optional value suggestions.
Completion CompletionHint
}
// Flag represents a typed binding for a command flag. Copies retain binding
@@ -202,13 +206,14 @@ func (c typedCommand[I]) bridgeFlags() []commandmeta.Flag {
for index, flag := range c.spec.Flags {
binding := flag.binding
flags[index] = commandmeta.Flag{
Name: binding.meta.Name,
Short: binding.meta.Short,
Usage: binding.meta.Usage,
Default: binding.defaultText,
Boolean: binding.boolean,
Repeated: binding.repeated,
Required: binding.meta.Required,
Name: binding.meta.Name,
Short: binding.meta.Short,
Usage: binding.meta.Usage,
Default: binding.defaultText,
Boolean: binding.boolean,
Repeated: binding.repeated,
Required: binding.meta.Required,
Completion: bridgeCompletion(binding.meta.Completion),
}
}
return flags
@@ -219,10 +224,11 @@ func (c typedCommand[I]) bridgeArguments() []commandmeta.Argument {
for index, argument := range c.spec.Arguments {
binding := argument.binding
arguments[index] = commandmeta.Argument{
Name: binding.meta.Name,
Usage: binding.meta.Usage,
Min: binding.min,
Max: binding.max,
Name: binding.meta.Name,
Usage: binding.meta.Usage,
Min: binding.min,
Max: binding.max,
Completion: bridgeCompletion(binding.meta.Completion),
}
}
return arguments