diff --git a/.travis.yml b/.travis.yml index ff0fcf7..361c67d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,8 +2,10 @@ language: go sudo: false go: - "1.x" + before_install: - go get github.com/mattn/goveralls + script: - - go test -v . + - go test -v ./... - $GOPATH/bin/goveralls -service=travis-ci diff --git a/argparse.go b/argparse.go index a11eb6b..47914d9 100644 --- a/argparse.go +++ b/argparse.go @@ -647,7 +647,7 @@ func (o *Command) Usage(msg interface{}) string { // was active when error happened and print that specific Command usage). // In case no error returned all arguments should be safe to use. Safety of using arguments // before Parse operation is complete is not guaranteed. -func (o *Parser) Parse(args []string) error { +func (o *Parser) ParseReturnArguments(args []string) ([]string, error) { subargs := make([]string, len(args)) copy(subargs, args) @@ -658,9 +658,15 @@ func (o *Parser) Parse(args []string) error { unparsed = append(unparsed, v) } } + + return unparsed, result +} + +func (o *Parser) Parse(args []string) error { + unparsed, result := o.ParseReturnArguments(args) + if result == nil && len(unparsed) > 0 { return errors.New("unknown arguments " + strings.Join(unparsed, " ")) } - return result } diff --git a/argument.go b/argument.go index 9b5aed3..7aed87c 100644 --- a/argument.go +++ b/argument.go @@ -28,6 +28,7 @@ type Arg interface { GetOpts() *Options GetSname() string GetLname() string + IsFlag() bool } func (o arg) GetOpts() *Options { @@ -42,6 +43,10 @@ func (o arg) GetLname() string { return o.lname } +func (o arg) IsFlag() bool { + return o.size == 1 +} + type help struct{} // checkLongName if long argumet present.