summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--complete.go57
-rw-r--r--go.mod6
-rw-r--r--go.sum12
-rw-r--r--parse.go25
4 files changed, 60 insertions, 40 deletions
diff --git a/complete.go b/complete.go
index 31a5398..b1711b9 100644
--- a/complete.go
+++ b/complete.go
@@ -9,12 +9,57 @@ import (
"go.wit.com/lib/protobuf/argvpb"
)
-// has the variables for autocomplete
-type Complete struct {
- Subcommand []string // this will be sent from the shell autocomplete scheme
- Partial string // whatever the user has partially entered on the commandline
- Stderr io.Writer // this is where Stderr
- Stdout io.Writer // this is where Stdout
+var useArgv bool
+var overrideFlags []string
+
+// pass in a "pretend" os.Args. Used for bash autocomplete
+// error is "good" in this case. The application exists
+// and finishes the output for shell autocomplete
+// returning "nil" means the application has to figure out what to do
+func ParseFlagsArgv(dest ...interface{}) (*Parser, error) {
+ p, err := NewParser(Config{}, dest...)
+ if err != nil {
+ return p, err
+ }
+ if argvpb.PB == nil {
+ panic("argvpb.PB is nil")
+ }
+ useArgv = true
+ overrideFlags = append(overrideFlags, argvpb.Real()...)
+ err = p.Parse(argvpb.Real())
+ if err != nil {
+ fmt.Fprintf(argvpb.Stddbg, "err(%v)\n", err)
+ fmt.Fprintln(argvpb.Stddbg, "arg.ParseFlagsArgv()", argvpb.Real())
+ fmt.Printf("\n")
+ fmt.Printf("\n")
+ fmt.Printf("err(%v)\n", err)
+ fmt.Println("arg.ParseFlagsArgv()", argvpb.Real())
+ s := fmt.Sprintf("p.Parse() problem in argv err(%v)\n", err)
+ panic(s)
+ }
+ if argvpb.PB.HelpCounter > 3 {
+ argvpb.SetDebug(true)
+ argvpb.PB.HelpCounter = 0
+ if argvpb.Len() == 0 {
+ fmt.Fprintf(argvpb.Stddbg, "len(PB.Real)=(%d)\n", len(argvpb.PB.Real))
+ p.WriteHelp(argvpb.Stderr)
+ fmt.Fprintf(argvpb.Stddbg, "WriteHelp() (%v)\n", "fricking got here")
+ fmt.Fprintf(argvpb.Stddbg, "WriteHelp() (%v)\n", "fricking got here")
+ fmt.Fprintf(argvpb.Stddbg, "WriteHelp() (%v)\n", "fricking got here")
+ return p, errors.New("WriteHelp() worked")
+ } else {
+ fmt.Fprintf(argvpb.Stddbg, "WriteHelp() damnit len(%v) (%v)\n", len(argvpb.PB.Real), argvpb.PB.Real)
+ fmt.Fprintf(argvpb.Stddbg, "WriteHelp() damnit len(%v) (%v)\n", len(argvpb.PB.Real), argvpb.PB.Real)
+ fmt.Fprintf(argvpb.Stddbg, "WriteHelp() damnit len(%v) (%v)\n", len(argvpb.PB.Real), argvpb.PB.Real)
+ }
+ err = p.WriteHelpForAutocomplete("", argvpb.PB.Real...)
+ if err != nil {
+ fmt.Fprintf(argvpb.Stddbg, "returned from WriteHelpForAutocomplete() pb.Real(%v)\n", argvpb.PB.Real)
+ fmt.Fprintf(argvpb.Stddbg, "returned from WriteHelpForAutocomplete(%v)\n", err)
+ }
+ return p, errors.New("WriteHelpForAutocomplete() worked")
+ }
+ return p, nil
}
func (p *Parser) WriteHelpForAutocompleteArgv() error {
diff --git a/go.mod b/go.mod
index 4e9bf6b..d42793d 100644
--- a/go.mod
+++ b/go.mod
@@ -5,7 +5,7 @@ go 1.24.1
require (
github.com/alexflint/go-scalar v1.2.0
github.com/stretchr/testify v1.11.1
- go.wit.com/lib/protobuf/argvpb v0.0.47
+ go.wit.com/lib/protobuf/argvpb v0.0.48
)
require (
@@ -13,8 +13,8 @@ require (
github.com/google/uuid v1.6.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
go.wit.com/lib/cobol v0.0.32 // indirect
- go.wit.com/lib/config v0.0.34 // indirect
- go.wit.com/lib/env v0.0.9 // indirect
+ go.wit.com/lib/config v0.0.35 // indirect
+ go.wit.com/lib/env v0.0.10 // indirect
go.wit.com/lib/protobuf/filepb v0.0.10 // indirect
go.wit.com/lib/protobuf/guipb v0.0.24 // indirect
go.wit.com/log v0.25.1 // indirect
diff --git a/go.sum b/go.sum
index 01da75d..a76b997 100644
--- a/go.sum
+++ b/go.sum
@@ -12,12 +12,12 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
go.wit.com/lib/cobol v0.0.32 h1:nBEXu8G1SOopBw23CgFLoDJ+I6VjxGhKBcMpb5Lwwug=
go.wit.com/lib/cobol v0.0.32/go.mod h1:mf2G1T4VPl1xSuRzbem3qdn3cWVBGFM38+BSXok5udo=
-go.wit.com/lib/config v0.0.34 h1:QqoBYBe28cDby8TIygHLQyxOeJX3Tgi6hY1CM0ZbNio=
-go.wit.com/lib/config v0.0.34/go.mod h1:D4fHO9WzZWc4WHmpvoiZkjcPUdvFMWZzkKQj6MB4C8Q=
-go.wit.com/lib/env v0.0.9 h1:L5oS80oJRm25Sm4qmcIcqXboez6QTQzqkuVOSOZo8yI=
-go.wit.com/lib/env v0.0.9/go.mod h1:Xun2SAnbPf7/qfgHAnxy7mdYh90N0KX3Pc+1UlCPY9U=
-go.wit.com/lib/protobuf/argvpb v0.0.47 h1:7PADVRiTmuUdHfB6+I016VBPggtN7TruFW/fqnnLUDE=
-go.wit.com/lib/protobuf/argvpb v0.0.47/go.mod h1:fMj8UWlz+sF6zz6SXbPKkHUDQVaSQ1gdRezpjcSfJIY=
+go.wit.com/lib/config v0.0.35 h1:26mzCbSsm/gAbbvqIwqqpUJyy89BumTZCakUI2myLuA=
+go.wit.com/lib/config v0.0.35/go.mod h1:D4fHO9WzZWc4WHmpvoiZkjcPUdvFMWZzkKQj6MB4C8Q=
+go.wit.com/lib/env v0.0.10 h1:ZfPgxW8RNYiKQRhPhQRtCuh/jFVORxI+PC9PzPj/7FI=
+go.wit.com/lib/env v0.0.10/go.mod h1:Xun2SAnbPf7/qfgHAnxy7mdYh90N0KX3Pc+1UlCPY9U=
+go.wit.com/lib/protobuf/argvpb v0.0.48 h1:CJGhp64sS25rE/Df9Bq3uHsjb5/l4Nc1QR39x8RWyyc=
+go.wit.com/lib/protobuf/argvpb v0.0.48/go.mod h1:0XWxdtwne0ZTsr5gOmeZ6JmaDbvW+I9YvNcgAv+lUxU=
go.wit.com/lib/protobuf/filepb v0.0.10 h1:lvhmK2BKjRn7NwfWZyWATw02/tTB5T3I48UGkB4tH4o=
go.wit.com/lib/protobuf/filepb v0.0.10/go.mod h1:DyRdTnVKbA+qWXzABdCBCgWcFswgdQNCvg/zE0wiBGQ=
go.wit.com/lib/protobuf/guipb v0.0.24 h1:JzbAPKfuSueWBgh1XzKH9+Hu5Z5EQghh65MmOcjcUXk=
diff --git a/parse.go b/parse.go
index b1cc9f2..4c47316 100644
--- a/parse.go
+++ b/parse.go
@@ -12,7 +12,6 @@ import (
"strings"
scalar "github.com/alexflint/go-scalar"
- "go.wit.com/lib/protobuf/argvpb"
)
// path represents a sequence of steps to find the output location for an
@@ -125,30 +124,6 @@ func Parse(dest ...interface{}) error {
return p.Parse(flags())
}
-var useArgv bool
-
-// pass in a "pretend" os.Args. Used for bash autocomplete
-func ParseFlagsArgv(dest ...interface{}) (*Parser, error) {
- p, err := NewParser(Config{}, dest...)
- if err != nil {
- return p, err
- }
- if argvpb.PB == nil {
- panic("argvpb.PB is nil")
- }
- useArgv = true
- overrideFlags = append(overrideFlags, argvpb.PB.Real...)
- err = p.Parse(argvpb.PB.Real)
- fmt.Fprintln(argvpb.Stddbg, "")
- fmt.Fprintf(argvpb.Stddbg, "err(%v)\n", err)
- fmt.Fprintln(argvpb.Stddbg, "arg.ParseFlagsArgv()", argvpb.PB.Real)
- fmt.Fprintln(argvpb.Stddbg, "arg.ParseFlagsArgv()", argvpb.PB.Real)
- // panic("in ParseFlagsArgv")
- return p, err
-}
-
-var overrideFlags []string
-
// flags gets all command line arguments other than the first (program name)
func flags() []string {
if len(overrideFlags) > 0 {