diff options
| author | Jeff Carr <[email protected]> | 2025-10-28 04:32:40 -0500 |
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2025-10-28 04:32:40 -0500 |
| commit | 83c516aefe9b2e50c6dd847c2991a0300e981f36 (patch) | |
| tree | 150a8bcb19817ebb7fb4345ad7dd2dd8030a6fd9 | |
| parent | 6aa36f359a86632a269acaaf0effa6dabe67c3bf (diff) | |
trigger autocomplete Help()
| -rw-r--r-- | complete.go | 57 | ||||
| -rw-r--r-- | go.mod | 6 | ||||
| -rw-r--r-- | go.sum | 12 | ||||
| -rw-r--r-- | parse.go | 25 |
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 { @@ -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 @@ -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= @@ -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 { |
