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  }