diff options
| author | Alex Ogier <[email protected]> | 2012-12-20 10:45:41 -0800 |
|---|---|---|
| committer | Alex Ogier <[email protected]> | 2012-12-20 10:45:41 -0800 |
| commit | a7be1c8beca28c928f9bd874b97e32fb3b02baef (patch) | |
| tree | c12c281ae78242733e933df99ce43bdb8e010ebc | |
| parent | fc678a46fb7fcef2879c7361da75cd77ec172444 (diff) | |
| parent | 6c61b06dffa80d2a272c8c2a79448954d9893c74 (diff) | |
Merge pull request #2 from alecthomas/master
Add ability to disable interspersed option support.
| -rw-r--r-- | flag.go | 17 | ||||
| -rw-r--r-- | flag_test.go | 15 |
2 files changed, 32 insertions, 0 deletions
@@ -271,6 +271,7 @@ type FlagSet struct { exitOnError bool // does the program exit if there's an error? errorHandling ErrorHandling output io.Writer // nil means stderr; use out() accessor + interspersed bool // allow interspersed option/non-option args } // A Flag represents the state of a flag. @@ -927,6 +928,11 @@ func (f *FlagSet) parseArgs(args []string) error { s := args[0] args = args[1:] if len(s) == 0 || s[0] != '-' || len(s) == 1 { + if !f.interspersed { + f.args = append(f.args, s) + f.args = append(f.args, args...) + return nil + } f.args = append(f.args, s) continue } @@ -1030,6 +1036,11 @@ func Parse() { commandLine.Parse(os.Args[1:]) } +// Whether to support interspersed option/non-option arguments. +func SetInterspersed(interspersed bool) { + commandLine.SetInterspersed(interspersed) +} + // Parsed returns true if the command-line flags have been parsed. func Parsed() bool { return commandLine.Parsed() @@ -1044,10 +1055,16 @@ func NewFlagSet(name string, errorHandling ErrorHandling) *FlagSet { f := &FlagSet{ name: name, errorHandling: errorHandling, + interspersed: true, } return f } +// Whether to support interspersed option/non-option arguments. +func (f *FlagSet) SetInterspersed(interspersed bool) { + f.interspersed = interspersed +} + // Init sets the name and error handling property for a flag set. // By default, the zero FlagSet uses an empty name and the // ContinueOnError error handling policy. diff --git a/flag_test.go b/flag_test.go index 9caa8c4..42d5483 100644 --- a/flag_test.go +++ b/flag_test.go @@ -335,3 +335,18 @@ func TestHelp(t *testing.T) { t.Fatal("help was called; should not have been for defined help flag") } } + +func TestNoInterspersed(t *testing.T) { + f := NewFlagSet("test", ContinueOnError) + f.SetInterspersed(false) + f.Bool("true", true, "always true") + f.Bool("false", false, "always false") + err := f.Parse([]string{"--true", "break", "--false"}) + if err != nil { + t.Fatal("expected no error; got ", err) + } + args := f.Args() + if len(args) != 2 || args[0] != "break" || args[1] != "--false" { + t.Fatal("expected interspersed options/non-options to fail") + } +} |
