You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by sh...@apache.org on 2025/08/25 09:02:32 UTC

(cloudstack-cloudmonkey) branch main updated: autocomplete: allow searching configuration name (#184)

This is an automated email from the ASF dual-hosted git repository.

shwstppr pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack-cloudmonkey.git


The following commit(s) were added to refs/heads/main by this push:
     new 94c1ef7  autocomplete: allow searching configuration name (#184)
94c1ef7 is described below

commit 94c1ef760e5c95bcd7fa4a76975029985537513a
Author: Abhishek Kumar <ab...@gmail.com>
AuthorDate: Mon Aug 25 14:32:28 2025 +0530

    autocomplete: allow searching configuration name (#184)
    
    Allows searching name for configurations for all *configuration(s) APIs.
    
    ---------
    
    Signed-off-by: Abhishek Kumar <ab...@gmail.com>
---
 cli/completer.go | 23 +++++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/cli/completer.go b/cli/completer.go
index e23d187..986b7e9 100644
--- a/cli/completer.go
+++ b/cli/completer.go
@@ -28,6 +28,10 @@ import (
 	"github.com/apache/cloudstack-cloudmonkey/config"
 )
 
+var nameSupportingApis = []string{
+	"configuration",
+}
+
 func buildAPICacheMap(apiMap map[string][]*config.API) map[string][]*config.API {
 	for _, cmd := range cmd.AllCommands() {
 		verb := cmd.Name
@@ -232,14 +236,25 @@ func findAutocompleteAPI(arg *config.APIArg, apiFound *config.API, apiMap map[st
 	default:
 		// Heuristic: autocomplete for the arg for which a list<Arg without id/ids>s API exists
 		// For example, for zoneid arg, listZones API exists
-		cutIdx := len(argName)
+		base := argName
 		if strings.HasSuffix(argName, "id") {
-			cutIdx -= 2
+			base = strings.TrimSuffix(argName, "id")
 		} else if strings.HasSuffix(argName, "ids") {
-			cutIdx -= 3
+			base = strings.TrimSuffix(argName, "ids")
+		} else if argName == "name" {
+			for _, noun := range nameSupportingApis {
+				if strings.HasPrefix(apiFound.Noun, noun) {
+					base = noun
+					break
+				}
+			}
+		}
+		// Handle common cases where base ends with a vowel and needs "es"
+		if strings.HasSuffix(base, "s") || strings.HasSuffix(base, "x") || strings.HasSuffix(base, "z") || strings.HasSuffix(base, "ch") || strings.HasSuffix(base, "sh") {
+			relatedNoun = base + "es"
 		} else {
+			relatedNoun = base + "s"
 		}
-		relatedNoun = argName[:cutIdx] + "s"
 	}
 
 	config.Debug("Possible related noun for the arg: ", relatedNoun, " and type: ", arg.Type)