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 }