summaryrefslogtreecommitdiff
path: root/complete.go
diff options
context:
space:
mode:
Diffstat (limited to 'complete.go')
-rw-r--r--complete.go46
1 files 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
}