From 83f7b5a8a63c633d4307bd272573117cb9b5c5ce Mon Sep 17 00:00:00 2001 From: cpendery Date: Tue, 12 Sep 2023 21:20:09 -0400 Subject: [PATCH] fix: bad arg recommendation logic Signed-off-by: cpendery --- autocomplete/completion.go | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/autocomplete/completion.go b/autocomplete/completion.go index e538659..bb3f9a0 100644 --- a/autocomplete/completion.go +++ b/autocomplete/completion.go @@ -84,25 +84,23 @@ func getPersistentTokens(tokens []model.ProcessedToken) []model.ProcessedToken { return persistentTokens } -func getSubcommandDrivenRecommendation(spec model.Subcommand, persistentOptions []model.Option, partialCmd *commandToken, onlyRecommendSubcommands bool, noSubcommandOptionRecommendations bool, acceptedTokens []model.ProcessedToken) model.TermSuggestions { +func getSubcommandDrivenRecommendation(spec model.Subcommand, persistentOptions []model.Option, partialCmd *commandToken, argsDepleted bool, argsFromSubcommand bool, acceptedTokens []model.ProcessedToken) model.TermSuggestions { suggestions := []model.TermSuggestion{} allOptions := append(spec.Options, persistentOptions...) - if onlyRecommendSubcommands { - if !noSubcommandOptionRecommendations { - getSubcommandDrivenRecommendations(spec, &suggestions) + if argsDepleted && argsFromSubcommand { + return model.TermSuggestions{ + Suggestions: suggestions, } - } else { - if len(spec.Args) != 0 { - activeArg := spec.Args[0] - getSuggestionDrivenRecommendations(activeArg.Suggestions, &suggestions) - getTemplateDrivenRecommendations(activeArg.Templates, &suggestions) - } - if !noSubcommandOptionRecommendations { - getSubcommandDrivenRecommendations(spec, &suggestions) - getOptionDrivenRecommendations(allOptions, &suggestions) - } - + } + if len(spec.Args) != 0 { + activeArg := spec.Args[0] + getSuggestionDrivenRecommendations(activeArg.Suggestions, &suggestions) + getTemplateDrivenRecommendations(activeArg.Templates, &suggestions) + } + if !argsFromSubcommand { + getSubcommandDrivenRecommendations(spec, &suggestions) + getOptionDrivenRecommendations(allOptions, &suggestions) } removeDuplicateRecommendation(&suggestions, acceptedTokens) @@ -154,8 +152,6 @@ func getArgDrivenRecommendation(args []model.Arg, spec model.Subcommand, persist } } -// argsUsed - func handleSubcommand(tokens []commandToken, spec model.Subcommand, persistentOptions []model.Option, argsDepleted, argsUsed bool, acceptedTokens []model.ProcessedToken) (suggestions model.TermSuggestions) { if len(tokens) == 0 { return getSubcommandDrivenRecommendation(spec, persistentOptions, nil, argsDepleted, argsUsed, acceptedTokens)