From e292751c38452edc9b8e0356b806c338011e3710 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Sat, 25 Oct 2025 19:33:13 -0500 Subject: more progress --- complete.go | 46 ++++++++++++++++++++++------------------------ 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/complete.go b/complete.go index b291b18..3854002 100644 --- a/complete.go +++ b/complete.go @@ -1,9 +1,9 @@ package arg import ( + "errors" "fmt" "io" - "os" "strings" "go.wit.com/lib/protobuf/argvpb" @@ -26,10 +26,15 @@ func (p *Parser) WriteHelpForAutocompleteArgv() error { // same as WriteHelpForSubcommand above, but can flip to STDERR and STDOUT // most shell autocomplete behavior usually wants things that way -func (p *Parser) WriteHelpForAutocomplete(stderr io.Writer, stdout io.Writer, partial string, subcommand ...string) error { +func (p *Parser) WriteHelpForAutocomplete(partial string, subcommand ...string) error { var automatch []string - if stderr == nil { - stderr = os.Stderr + fmt.Fprintf(argvpb.Stderr, "go-args.WriteHelpForAutocomplete() sub(%v)\n", subcommand) + // return errors.New("subcommand was nil") + if p == nil { + return errors.New("arg.Parser == nil") + } + if subcommand == nil { + return errors.New("subcommand was nil") } cmd, err := p.lookupCommand(subcommand...) if err != nil { @@ -83,20 +88,20 @@ func (p *Parser) WriteHelpForAutocomplete(stderr io.Writer, stdout io.Writer, pa // write the list of positionals if len(positionals) > 0 { - fmt.Fprint(stderr, "\nPositional arguments:\n") + fmt.Fprint(argvpb.Stderr, "\nPositional arguments:\n") for _, spec := range positionals { - print(stderr, spec.placeholder, spec.help, withDefault(spec.defaultString), withEnv(spec.env)) + print(argvpb.Stderr, spec.placeholder, spec.help, withDefault(spec.defaultString), withEnv(spec.env)) } } // write the list of options with the short-only ones first to match the usage string if len(shortOptions)+len(longOptions) > 0 || cmd.parent == nil { - fmt.Fprint(stderr, "\nOptions:\n") + fmt.Fprint(argvpb.Stderr, "\nOptions:\n") for _, spec := range shortOptions { - p.printOption(stderr, spec) + p.printOption(argvpb.Stderr, spec) } for _, spec := range longOptions { - p.printOption(stderr, spec) + p.printOption(argvpb.Stderr, spec) //jwc tmp := "--" + spec.long if strings.HasPrefix(tmp, partial) { @@ -132,18 +137,18 @@ func (p *Parser) WriteHelpForAutocomplete(stderr io.Writer, stdout io.Writer, pa // write the list of environment only variables if len(envOnlyOptions) > 0 { - fmt.Fprint(stderr, "\nEnvironment variables:\n") + fmt.Fprint(argvpb.Stderr, "\nEnvironment variables:\n") for _, spec := range envOnlyOptions { - p.printEnvOnlyVar(stderr, spec) + p.printEnvOnlyVar(argvpb.Stderr, spec) } } // write the list of subcommands if len(cmd.subcommands) > 0 { - fmt.Fprint(stderr, "\nCommands:\n") + fmt.Fprint(argvpb.Stderr, "\nCommands:\n") for _, subcmd := range cmd.subcommands { names := append([]string{subcmd.name}, subcmd.aliases...) - print(stderr, strings.Join(names, ", "), subcmd.help) + print(argvpb.Stderr, strings.Join(names, ", "), subcmd.help) if strings.HasPrefix(subcmd.name, partial) { automatch = append(automatch, subcmd.name) } @@ -151,19 +156,12 @@ func (p *Parser) WriteHelpForAutocomplete(stderr io.Writer, stdout io.Writer, pa } if p.epilogue != "" { - fmt.Fprintln(stderr, "\n"+p.epilogue) + fmt.Fprintln(argvpb.Stderr, "\n"+p.epilogue) } - if stdout == nil { - fmt.Fprintf(os.Stdout, "err foo") - } else { - // writes out the shell autocomplete matches - if len(automatch) > 0 { - // fmt.Fprintf(os.Stderr, "%s\n", strings.Join(automatch, " ")) - // fmt.Fprintf(os.Stderr, "%s\n", strings.Join(automatch, " ")) - // fmt.Fprintf(os.Stderr, "\n") - fmt.Fprintf(stdout, "%s", strings.Join(automatch, " ")) - } + // writes out the shell autocomplete matches + if len(automatch) > 0 { + fmt.Fprintf(argvpb.Stdout, "%s", strings.Join(automatch, " ")) } return nil } -- cgit v1.2.3