@@ -381,7 +381,7 @@ func (f *FlagSet) lookup(name NormalizedName) *Flag {
381381func (f * FlagSet ) getFlagType (name string , ftype string , convFunc func (sval string ) (interface {}, error )) (interface {}, error ) {
382382 flag := f .Lookup (name )
383383 if flag == nil {
384- err := fmt . Errorf ( "flag accessed but not defined: %s" , name )
384+ err := & NotExistError { name : name , messageType : flagNotDefinedMessage }
385385 return nil , err
386386 }
387387
@@ -411,7 +411,7 @@ func (f *FlagSet) ArgsLenAtDash() int {
411411func (f * FlagSet ) MarkDeprecated (name string , usageMessage string ) error {
412412 flag := f .Lookup (name )
413413 if flag == nil {
414- return fmt . Errorf ( "flag %q does not exist" , name )
414+ return & NotExistError { name : name , messageType : flagNotExistMessage }
415415 }
416416 if usageMessage == "" {
417417 return fmt .Errorf ("deprecated message for flag %q must be set" , name )
@@ -427,7 +427,7 @@ func (f *FlagSet) MarkDeprecated(name string, usageMessage string) error {
427427func (f * FlagSet ) MarkShorthandDeprecated (name string , usageMessage string ) error {
428428 flag := f .Lookup (name )
429429 if flag == nil {
430- return fmt . Errorf ( "flag %q does not exist" , name )
430+ return & NotExistError { name : name , messageType : flagNotExistMessage }
431431 }
432432 if usageMessage == "" {
433433 return fmt .Errorf ("deprecated message for flag %q must be set" , name )
@@ -441,7 +441,7 @@ func (f *FlagSet) MarkShorthandDeprecated(name string, usageMessage string) erro
441441func (f * FlagSet ) MarkHidden (name string ) error {
442442 flag := f .Lookup (name )
443443 if flag == nil {
444- return fmt . Errorf ( "flag %q does not exist" , name )
444+ return & NotExistError { name : name , messageType : flagNotExistMessage }
445445 }
446446 flag .Hidden = true
447447 return nil
@@ -464,18 +464,16 @@ func (f *FlagSet) Set(name, value string) error {
464464 normalName := f .normalizeFlagName (name )
465465 flag , ok := f .formal [normalName ]
466466 if ! ok {
467- return fmt . Errorf ( "no such flag -%v" , name )
467+ return & NotExistError { name : name , messageType : flagNoSuchFlagMessage }
468468 }
469469
470470 err := flag .Value .Set (value )
471471 if err != nil {
472- var flagName string
473- if flag .Shorthand != "" && flag .ShorthandDeprecated == "" {
474- flagName = fmt .Sprintf ("-%s, --%s" , flag .Shorthand , flag .Name )
475- } else {
476- flagName = fmt .Sprintf ("--%s" , flag .Name )
472+ return & InvalidValueError {
473+ flag : flag ,
474+ value : value ,
475+ cause : err ,
477476 }
478- return fmt .Errorf ("invalid argument %q for %q flag: %v" , value , flagName , err )
479477 }
480478
481479 if ! flag .Changed {
@@ -501,7 +499,7 @@ func (f *FlagSet) SetAnnotation(name, key string, values []string) error {
501499 normalName := f .normalizeFlagName (name )
502500 flag , ok := f .formal [normalName ]
503501 if ! ok {
504- return fmt . Errorf ( "no such flag -%v" , name )
502+ return & NotExistError { name : name , messageType : flagNoSuchFlagMessage }
505503 }
506504 if flag .Annotations == nil {
507505 flag .Annotations = map [string ][]string {}
@@ -551,7 +549,7 @@ func (f *Flag) defaultIsZeroValue() bool {
551549 case * intSliceValue , * stringSliceValue , * stringArrayValue :
552550 return f .DefValue == "[]"
553551 default :
554- switch f .Value . String () {
552+ switch f .DefValue {
555553 case "false" :
556554 return true
557555 case "<nil>" :
@@ -911,10 +909,9 @@ func VarP(value Value, name, shorthand, usage string) {
911909 CommandLine .VarP (value , name , shorthand , usage )
912910}
913911
914- // failf prints to standard error a formatted error and usage message and
912+ // fail prints an error message and usage message to standard error and
915913// returns the error.
916- func (f * FlagSet ) failf (format string , a ... interface {}) error {
917- err := fmt .Errorf (format , a ... )
914+ func (f * FlagSet ) fail (err error ) error {
918915 if f .errorHandling != ContinueOnError {
919916 fmt .Fprintln (f .Output (), err )
920917 f .usage ()
@@ -960,7 +957,7 @@ func (f *FlagSet) parseLongArg(s string, args []string, fn parseFunc) (a []strin
960957 a = args
961958 name := s [2 :]
962959 if len (name ) == 0 || name [0 ] == '-' || name [0 ] == '=' {
963- err = f .failf ( "bad flag syntax: %s" , s )
960+ err = f .fail ( & InvalidSyntaxError { specifiedFlag : s } )
964961 return
965962 }
966963
@@ -982,7 +979,7 @@ func (f *FlagSet) parseLongArg(s string, args []string, fn parseFunc) (a []strin
982979
983980 return stripUnknownFlagValue (a ), nil
984981 default :
985- err = f .failf ( "unknown flag: --%s" , name )
982+ err = f .fail ( & NotExistError { name : name , messageType : flagUnknownFlagMessage } )
986983 return
987984 }
988985 }
@@ -1000,13 +997,16 @@ func (f *FlagSet) parseLongArg(s string, args []string, fn parseFunc) (a []strin
1000997 a = a [1 :]
1001998 } else {
1002999 // '--flag' (arg was required)
1003- err = f .failf ("flag needs an argument: %s" , s )
1000+ err = f .fail (& ValueRequiredError {
1001+ flag : flag ,
1002+ specifiedName : name ,
1003+ })
10041004 return
10051005 }
10061006
10071007 err = fn (flag , value )
10081008 if err != nil {
1009- f .failf (err . Error () )
1009+ f .fail (err )
10101010 }
10111011 return
10121012}
@@ -1039,7 +1039,11 @@ func (f *FlagSet) parseSingleShortArg(shorthands string, args []string, fn parse
10391039 outArgs = stripUnknownFlagValue (outArgs )
10401040 return
10411041 default :
1042- err = f .failf ("unknown shorthand flag: %q in -%s" , c , shorthands )
1042+ err = f .fail (& NotExistError {
1043+ name : string (c ),
1044+ specifiedShorthands : shorthands ,
1045+ messageType : flagUnknownShorthandFlagMessage ,
1046+ })
10431047 return
10441048 }
10451049 }
@@ -1062,7 +1066,11 @@ func (f *FlagSet) parseSingleShortArg(shorthands string, args []string, fn parse
10621066 outArgs = args [1 :]
10631067 } else {
10641068 // '-f' (arg was required)
1065- err = f .failf ("flag needs an argument: %q in -%s" , c , shorthands )
1069+ err = f .fail (& ValueRequiredError {
1070+ flag : flag ,
1071+ specifiedName : string (c ),
1072+ specifiedShorthands : shorthands ,
1073+ })
10661074 return
10671075 }
10681076
@@ -1072,7 +1080,7 @@ func (f *FlagSet) parseSingleShortArg(shorthands string, args []string, fn parse
10721080
10731081 err = fn (flag , value )
10741082 if err != nil {
1075- f .failf (err . Error () )
1083+ f .fail (err )
10761084 }
10771085 return
10781086}
0 commit comments