This is an automated email from the ASF dual-hosted git repository. rohit pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/cloudstack-cloudmonkey.git
The following commit(s) were added to refs/heads/master by this push: new 01c1f1f cli: implement heuristics based completer as a fallback 01c1f1f is described below commit 01c1f1f1473fe51d71e7e77915c783b96c981b11 Author: Rohit Yadav <ro...@apache.org> AuthorDate: Thu Oct 25 11:39:37 2018 +0530 cli: implement heuristics based completer as a fallback This implements a API heuristics based options API arg completer based on the related API name for an arg, or if a list API exists whose name contains the arg name. Signed-off-by: Rohit Yadav <ro...@apache.org> --- cli/completer.go | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/cli/completer.go b/cli/completer.go index 06bd29b..29c944f 100644 --- a/cli/completer.go +++ b/cli/completer.go @@ -18,7 +18,6 @@ package cli import ( - "fmt" "sort" "strings" @@ -152,6 +151,22 @@ func completer(in prompt.Document) []prompt.Suggest { break } } + if optionsAPI == nil { + if len(argFound.Related) > 0 { + apiCache := cfg.GetCache() + relatedAPIName := strings.ToLower(argFound.Related[0]) + if apiCache[relatedAPIName] != nil { + optionsAPI = apiCache[relatedAPIName] + } + } else { + for _, related := range apiMap["list"] { + if strings.Contains(related.Noun, relatedNoun) { + optionsAPI = related + break + } + } + } + } if optionsAPI != nil { r := cmd.NewRequest(nil, cfg, nil) optionsArgs := []string{"listall=true"} @@ -160,7 +175,6 @@ func completer(in prompt.Document) []prompt.Suggest { } if cachedResponse == nil { - fmt.Println("") spinner := cfg.StartSpinner("fetching options, please wait...") cachedResponse, _ = cmd.NewAPIRequest(r, optionsAPI.Name, optionsArgs, false) cfg.StopSpinner(spinner) @@ -186,7 +200,7 @@ func completer(in prompt.Document) []prompt.Suggest { } else if resource["username"] != nil { opt.Description = resource["username"].(string) } - if opt.Text == "" { + if argFound.Type == "string" { opt.Text = opt.Description } s = append(s, opt)