github.com/cli/cli@v1.14.1-0.20210902173923-1af6a669e342/pkg/cmdutil/args.go (about) 1 package cmdutil 2 3 import ( 4 "errors" 5 "fmt" 6 7 "github.com/spf13/cobra" 8 "github.com/spf13/pflag" 9 ) 10 11 func MinimumArgs(n int, msg string) cobra.PositionalArgs { 12 if msg == "" { 13 return cobra.MinimumNArgs(1) 14 } 15 16 return func(cmd *cobra.Command, args []string) error { 17 if len(args) < n { 18 return &FlagError{Err: errors.New(msg)} 19 } 20 return nil 21 } 22 } 23 24 func ExactArgs(n int, msg string) cobra.PositionalArgs { 25 26 return func(cmd *cobra.Command, args []string) error { 27 if len(args) > n { 28 return &FlagError{Err: errors.New("too many arguments")} 29 } 30 31 if len(args) < n { 32 return &FlagError{Err: errors.New(msg)} 33 } 34 35 return nil 36 } 37 } 38 39 func NoArgsQuoteReminder(cmd *cobra.Command, args []string) error { 40 if len(args) < 1 { 41 return nil 42 } 43 44 errMsg := fmt.Sprintf("unknown argument %q", args[0]) 45 if len(args) > 1 { 46 errMsg = fmt.Sprintf("unknown arguments %q", args) 47 } 48 49 hasValueFlag := false 50 cmd.Flags().Visit(func(f *pflag.Flag) { 51 if f.Value.Type() != "bool" { 52 hasValueFlag = true 53 } 54 }) 55 56 if hasValueFlag { 57 errMsg += "; please quote all values that have spaces" 58 } 59 60 return &FlagError{Err: errors.New(errMsg)} 61 }