Capture completion hints in command metadata
This commit is contained in:
55
completion.go
Normal file
55
completion.go
Normal file
@@ -0,0 +1,55 @@
|
||||
package commandkit
|
||||
|
||||
import commandmeta "gitea.maximumdirect.net/eric/CommandKit/internal/commandmeta"
|
||||
|
||||
// CompletionChoice is a literal suggested value and its optional description.
|
||||
type CompletionChoice struct {
|
||||
Value string
|
||||
Description string
|
||||
}
|
||||
|
||||
// CompletionHint selects suggestions for a flag or positional value. Its zero
|
||||
// value requests no value suggestions; hints do not constrain accepted input.
|
||||
type CompletionHint struct {
|
||||
kind completionHintKind
|
||||
choices []CompletionChoice
|
||||
}
|
||||
|
||||
type completionHintKind uint8
|
||||
|
||||
const (
|
||||
completionNone completionHintKind = iota
|
||||
completionChoices
|
||||
completionFiles
|
||||
completionDirectories
|
||||
)
|
||||
|
||||
// CompleteChoices suggests literal values. The supplied slice is copied.
|
||||
func CompleteChoices(choices ...CompletionChoice) CompletionHint {
|
||||
return CompletionHint{kind: completionChoices, choices: append([]CompletionChoice(nil), choices...)}
|
||||
}
|
||||
|
||||
// CompleteFiles requests shell filename completion.
|
||||
func CompleteFiles() CompletionHint { return CompletionHint{kind: completionFiles} }
|
||||
|
||||
// CompleteDirectories requests shell directory completion.
|
||||
func CompleteDirectories() CompletionHint { return CompletionHint{kind: completionDirectories} }
|
||||
|
||||
// NoCompletion requests no value suggestions.
|
||||
func NoCompletion() CompletionHint { return CompletionHint{} }
|
||||
|
||||
func bridgeCompletion(hint CompletionHint) commandmeta.CompletionHint {
|
||||
result := commandmeta.CompletionHint{}
|
||||
switch hint.kind {
|
||||
case completionChoices:
|
||||
result.Kind = commandmeta.CompletionChoices
|
||||
for _, choice := range hint.choices {
|
||||
result.Choices = append(result.Choices, commandmeta.CompletionChoice{Value: choice.Value, Description: choice.Description})
|
||||
}
|
||||
case completionFiles:
|
||||
result.Kind = commandmeta.CompletionFiles
|
||||
case completionDirectories:
|
||||
result.Kind = commandmeta.CompletionDirectories
|
||||
}
|
||||
return result
|
||||
}
|
||||
Reference in New Issue
Block a user