diff options
| author | Jeff Carr <[email protected]> | 2025-10-28 05:30:12 -0500 | 
|---|---|---|
| committer | Jeff Carr <[email protected]> | 2025-10-28 05:30:12 -0500 | 
| commit | ad6d1a1e535a489ce5e9e602d07ac4c03d753f80 (patch) | |
| tree | 2a07bfff60460a3767695978cf16f7ee7e7b0003 | |
| parent | 44581edefc99b1b444b02b900ff997ab1dba3ef8 (diff) | |
rm junk. add Match()
| -rw-r--r-- | complete.go | 18 | ||||
| -rw-r--r-- | parse.go | 10 | 
2 files changed, 18 insertions, 10 deletions
diff --git a/complete.go b/complete.go index 8cb062e..25d5ef6 100644 --- a/complete.go +++ b/complete.go @@ -41,21 +41,15 @@ func ParseFlagsArgv(dest ...interface{}) (*Parser, error) {  		argvpb.SetDebug(true)  		argvpb.PB.HelpCounter = 0  		if argvpb.Len() == 0 { -			fmt.Fprintf(argvpb.Stddbg, "len(PB.Real)=(%d)\n", len(argvpb.PB.Real)) +			// user didn't enter any text and is hitting <tab> after the command itself  			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)  		} +		// user is trying to get help for a subcommand  		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) +			// fmt.Fprintf(argvpb.Stddbg, "returned from WriteHelpForAutocomplete() pb.Real(%v)\n", argvpb.PB.Real) +			fmt.Fprintf(argvpb.Stddbg, "WriteHelpForAutocomplete() err(%v)\n", err)  		}  		return p, errors.New("WriteHelpForAutocomplete() worked")  	} @@ -63,6 +57,10 @@ func ParseFlagsArgv(dest ...interface{}) (*Parser, error) {  		err = p.WriteHelpForAutocomplete(argvpb.PB.Partial, argvpb.PB.Real...)  		fmt.Fprintf(argvpb.Stderr, "returned from WriteHelpForAutocomplete() pb.Real(%v)\n", argvpb.PB.Real)  		fmt.Fprintf(argvpb.Stderr, "returned from WriteHelpForAutocomplete(%v)\n", err) +		if p.match != nil { +			// calls back to the application. this allows the application to provide autocomplete matches +			p.match() +		}  		return p, errors.New("WriteHelpForAutocomplete() subcommand worked")  	}  	return p, nil @@ -168,6 +168,7 @@ type Parser struct {  	config      Config  	version     string  	description string +	match       func() bool  	epilogue    string  	// the following field changes during processing of command line arguments @@ -190,6 +191,12 @@ type Described interface {  	Description() string  } +// will let the application provide matches for autocomplete +type Matched interface { +	// the application should return true if it's happy with itself +	Match() bool +} +  // Epilogued is the interface that the destination struct should implement to  // add an epilogue string at the bottom of the help message.  type Epilogued interface { @@ -300,6 +307,9 @@ func NewParser(config Config, dests ...interface{}) (*Parser, error) {  		if dest, ok := dest.(Described); ok {  			p.description = dest.Description()  		} +		if dest, ok := dest.(Matched); ok { +			p.match = dest.Match +		}  		if dest, ok := dest.(Epilogued); ok {  			p.epilogue = dest.Epilogue()  		}  | 
