package complete // Predictor implements a predict method, in which given // command line arguments returns a list of options it predicts. type Predictor interface { Predict(Args) []string } // PredictOr unions two predicate functions, so that the result predicate // returns the union of their predication func PredictOr(predictors ...Predictor) Predictor { return PredictFunc(func(a Args) (prediction []string) { for _, p := range predictors { if p == nil { continue } prediction = append(prediction, p.Predict(a)...) } return }) } // PredictFunc determines what terms can follow a command or a flag // It is used for auto completion, given last - the last word in the already // in the command line, what words can complete it. type PredictFunc func(Args) []string // Predict invokes the predict function and implements the Predictor interface func (p PredictFunc) Predict(a Args) []string { if p == nil { return nil } return p(a) } // PredictNothing does not expect anything after. var PredictNothing Predictor // PredictAnything expects something, but nothing particular, such as a number // or arbitrary name. var PredictAnything = PredictFunc(func(Args) []string { return nil })