@@ -108,6 +108,31 @@ EXAMPLES
108108 fmt .Fprintf (os .Stderr , "unable to provide template suggestions: %v" , err )
109109 }
110110
111+ // Detect hyphen-prefixed arguments mis-parsed as flags
112+ cmd .SetFlagErrorFunc (func (cmd * cobra.Command , err error ) error {
113+ for _ , arg := range os .Args [1 :] {
114+ if strings .HasPrefix (arg , "--" ) {
115+ flagName := strings .TrimPrefix (arg , "--" )
116+ if cmd .Flags ().Lookup (flagName ) != nil {
117+ continue
118+ }
119+ if strings .Contains (err .Error (), "unknown flag" ) && strings .Contains (err .Error (), arg ) {
120+ return wrapFlagParsingError (err , arg )
121+ }
122+ } else if strings .HasPrefix (arg , "-" ) && len (arg ) > 1 {
123+ firstChar := string (arg [1 ])
124+ shortFlag := cmd .Flags ().ShorthandLookup (firstChar )
125+
126+ if shortFlag != nil && len (arg ) > 2 && strings .Contains (arg , "-" ) {
127+ return wrapFlagParsingError (err , arg )
128+ } else if strings .Contains (err .Error (), "unknown shorthand flag" ) && strings .Contains (err .Error (), arg [1 :2 ]) {
129+ return wrapFlagParsingError (err , arg )
130+ }
131+ }
132+ }
133+ return err
134+ })
135+
111136 return cmd
112137}
113138
@@ -390,7 +415,20 @@ func newInvalidRuntimeError(client *fn.Client, runtime string) error {
390415 for _ , v := range runtimes {
391416 fmt .Fprintf (& b , " %v\n " , v )
392417 }
393- return ErrInvalidRuntime (errors .New (b .String ()))
418+
419+ baseErr := ErrInvalidRuntime (errors .New (b .String ()))
420+
421+ // Check if runtime value indicates mis-parsed function name
422+ for _ , arg := range os .Args [1 :] {
423+ if strings .HasPrefix (arg , "-" ) && len (arg ) > 2 && strings .Contains (arg [2 :], "-" ) {
424+ if strings .HasPrefix (arg [2 :], runtime ) || runtime == strings .TrimPrefix (arg , "-" + string (arg [1 ])) {
425+ flagChar := string (arg [1 ])
426+ return wrapFlagParsingErrorWithDetails (baseErr , arg , flagChar , runtime )
427+ }
428+ }
429+ }
430+
431+ return baseErr
394432}
395433
396434// newInvalidTemplateError creates an error stating that the given template
@@ -407,7 +445,20 @@ func newInvalidTemplateError(client *fn.Client, runtime, template string) error
407445 for _ , v := range templates {
408446 fmt .Fprintf (& b , " %v\n " , v )
409447 }
410- return ErrInvalidTemplate (errors .New (b .String ()))
448+
449+ baseErr := ErrInvalidTemplate (errors .New (b .String ()))
450+
451+ // Check if template value indicates mis-parsed function name
452+ for _ , arg := range os .Args [1 :] {
453+ if strings .HasPrefix (arg , "-" ) && len (arg ) > 2 && strings .Contains (arg [2 :], "-" ) {
454+ if strings .HasPrefix (arg [2 :], template ) || template == strings .TrimPrefix (arg , "-" + string (arg [1 ])) {
455+ flagChar := string (arg [1 ])
456+ return wrapFlagParsingErrorWithDetails (baseErr , arg , flagChar , template )
457+ }
458+ }
459+ }
460+
461+ return baseErr
411462}
412463
413464// prompt the user with value of config members, allowing for interactively
0 commit comments