diff --git a/required.go b/required.go index db1a98bd52..94710374e6 100644 --- a/required.go +++ b/required.go @@ -2,30 +2,19 @@ package cli import ( "fmt" + "strings" "github.com/spf13/cobra" ) -// MinRequiredArgs checks if the minimum number of args exists, and returns an -// error if they do not. -func MinRequiredArgs(args []string, min int, cmd *cobra.Command) error { - if len(args) >= min { +// NoArgs validate args and returns an error if there are any args +func NoArgs(cmd *cobra.Command, args []string) error { + if len(args) == 0 { return nil } - return fmt.Errorf( - "\"%s\" requires at least %d argument(s).\n\nUsage: %s\n\n%s", - cmd.CommandPath(), - min, - cmd.UseLine(), - cmd.Short, - ) -} - -// AcceptsNoArgs returns an error message if there are args -func AcceptsNoArgs(args []string, cmd *cobra.Command) error { - if len(args) == 0 { - return nil + if cmd.HasSubCommands() { + return fmt.Errorf("\n" + strings.TrimRight(cmd.UsageString(), "\n")) } return fmt.Errorf( @@ -35,3 +24,19 @@ func AcceptsNoArgs(args []string, cmd *cobra.Command) error { cmd.Short, ) } + +// RequiresMinArgs returns an error if there is not at least min args +func RequiresMinArgs(min int) cobra.PositionalArgs { + return func(cmd *cobra.Command, args []string) error { + if len(args) >= min { + return nil + } + return fmt.Errorf( + "\"%s\" requires at least %d argument(s).\n\nUsage: %s\n\n%s", + cmd.CommandPath(), + min, + cmd.UseLine(), + cmd.Short, + ) + } +}