Merge remote-tracking branch 'origin/v3-dev-main' into v3-porting

This commit is contained in:
Dan Buch 2022-10-09 12:40:44 -04:00
commit 64facdbe2f
Signed by: meatballhat
GPG Key ID: A12F782281063434
12 changed files with 258 additions and 134 deletions

10
app.go
View File

@ -228,7 +228,9 @@ func (a *App) Setup() {
a.flagCategories = newFlagCategories() a.flagCategories = newFlagCategories()
for _, fl := range a.Flags { for _, fl := range a.Flags {
a.flagCategories.AddFlag(fl.GetCategory(), fl) if cf, ok := fl.(CategorizableFlag); ok {
a.flagCategories.AddFlag(cf.GetCategory(), cf)
}
} }
if a.Metadata == nil { if a.Metadata == nil {
@ -662,8 +664,10 @@ func runFlagActions(c *Context, fs []Flag) error {
} }
} }
if isSet { if isSet {
if err := f.RunAction(c); err != nil { if af, ok := f.(ActionableFlag); ok {
return err if err := af.RunAction(c); err != nil {
return err
}
} }
} }
} }

View File

@ -101,7 +101,9 @@ func newFlagCategories() FlagCategories {
func newFlagCategoriesFromFlags(fs []Flag) FlagCategories { func newFlagCategoriesFromFlags(fs []Flag) FlagCategories {
fc := newFlagCategories() fc := newFlagCategories()
for _, fl := range fs { for _, fl := range fs {
fc.AddFlag(fl.GetCategory(), fl) if cf, ok := fl.(CategorizableFlag); ok {
fc.AddFlag(cf.GetCategory(), cf)
}
} }
return fc return fc
@ -136,7 +138,7 @@ type VisibleFlagCategory interface {
// Name returns the category name string // Name returns the category name string
Name() string Name() string
// Flags returns a slice of VisibleFlag sorted by name // Flags returns a slice of VisibleFlag sorted by name
Flags() []Flag Flags() []VisibleFlag
} }
type defaultVisibleFlagCategory struct { type defaultVisibleFlagCategory struct {
@ -148,19 +150,21 @@ func (fc *defaultVisibleFlagCategory) Name() string {
return fc.name return fc.name
} }
func (fc *defaultVisibleFlagCategory) Flags() []Flag { func (fc *defaultVisibleFlagCategory) Flags() []VisibleFlag {
vfNames := []string{} vfNames := []string{}
for flName, fl := range fc.m { for flName, fl := range fc.m {
if fl.IsVisible() { if vf, ok := fl.(VisibleFlag); ok {
vfNames = append(vfNames, flName) if vf.IsVisible() {
vfNames = append(vfNames, flName)
}
} }
} }
sort.Strings(vfNames) sort.Strings(vfNames)
ret := make([]Flag, len(vfNames)) ret := make([]VisibleFlag, len(vfNames))
for i, flName := range vfNames { for i, flName := range vfNames {
ret[i] = fc.m[flName] ret[i] = fc.m[flName].(VisibleFlag)
} }
return ret return ret

View File

@ -311,7 +311,9 @@ func (c *Command) VisibleFlagCategories() []VisibleFlagCategory {
if c.flagCategories == nil { if c.flagCategories == nil {
c.flagCategories = newFlagCategories() c.flagCategories = newFlagCategories()
for _, fl := range c.Flags { for _, fl := range c.Flags {
c.flagCategories.AddFlag(fl.GetCategory(), fl) if cf, ok := fl.(CategorizableFlag); ok {
c.flagCategories.AddFlag(cf.GetCategory(), fl)
}
} }
} }
return c.flagCategories.VisibleCategories() return c.flagCategories.VisibleCategories()

View File

@ -180,7 +180,7 @@ func (cCtx *Context) lookupFlagSet(name string) *flag.FlagSet {
func (cCtx *Context) checkRequiredFlags(flags []Flag) requiredFlagsErr { func (cCtx *Context) checkRequiredFlags(flags []Flag) requiredFlagsErr {
var missingFlags []string var missingFlags []string
for _, f := range flags { for _, f := range flags {
if f.IsRequired() { if rf, ok := f.(RequiredFlag); ok && rf.IsRequired() {
var flagPresent bool var flagPresent bool
var flagName string var flagName string

View File

@ -116,7 +116,11 @@ func prepareFlags(
addDetails bool, addDetails bool,
) []string { ) []string {
args := []string{} args := []string{}
for _, flag := range flags { for _, f := range flags {
flag, ok := f.(DocGenerationFlag)
if !ok {
continue
}
modifiedArg := opener modifiedArg := opener
for _, s := range flag.Names() { for _, s := range flag.Names() {
@ -147,7 +151,7 @@ func prepareFlags(
} }
// flagDetails returns a string containing the flags metadata // flagDetails returns a string containing the flags metadata
func flagDetails(flag Flag) string { func flagDetails(flag DocGenerationFlag) string {
description := flag.GetUsage() description := flag.GetUsage()
value := flag.GetValue() value := flag.GetValue()
if value != "" { if value != "" {

View File

@ -114,7 +114,12 @@ func (a *App) prepareFishCommands(commands []*Command, allCommands *[]string, pr
func (a *App) prepareFishFlags(flags []Flag, previousCommands []string) []string { func (a *App) prepareFishFlags(flags []Flag, previousCommands []string) []string {
completions := []string{} completions := []string{}
for _, flag := range flags { for _, f := range flags {
flag, ok := f.(DocGenerationFlag)
if !ok {
continue
}
completion := &strings.Builder{} completion := &strings.Builder{}
completion.WriteString(fmt.Sprintf( completion.WriteString(fmt.Sprintf(
"complete -c %s -n '%s'", "complete -c %s -n '%s'",
@ -122,7 +127,7 @@ func (a *App) prepareFishFlags(flags []Flag, previousCommands []string) []string
a.fishSubcommandHelper(previousCommands), a.fishSubcommandHelper(previousCommands),
)) ))
fishAddFileFlag(flag, completion) fishAddFileFlag(f, completion)
for idx, opt := range flag.Names() { for idx, opt := range flag.Names() {
if idx == 0 { if idx == 0 {

56
flag.go
View File

@ -83,6 +83,12 @@ func (f FlagsByName) Swap(i, j int) {
f[i], f[j] = f[j], f[i] f[i], f[j] = f[j], f[i]
} }
// ActionableFlag is an interface that wraps Flag interface and RunAction operation.
type ActionableFlag interface {
Flag
RunAction(*Context) error
}
// Flag is a common interface related to parsing flags in cli. // Flag is a common interface related to parsing flags in cli.
// For more advanced flag parsing techniques, it is recommended that // For more advanced flag parsing techniques, it is recommended that
// this interface be implemented. // this interface be implemented.
@ -97,33 +103,36 @@ type Flag interface {
// Whether the flag has been set or not // Whether the flag has been set or not
IsSet() bool IsSet() bool
}
// RequiredFlag is an interface that allows us to mark flags as required
// it allows flags required flags to be backwards compatible with the Flag interface
type RequiredFlag interface {
Flag
// whether the flag is a required flag or not // whether the flag is a required flag or not
IsRequired() bool IsRequired() bool
}
// IsVisible returns true if the flag is not hidden, otherwise false // DocGenerationFlag is an interface that allows documentation generation for the flag
IsVisible() bool type DocGenerationFlag interface {
Flag
// Returns the category of the flag
GetCategory() string
// GetUsage returns the usage string for the flag
GetUsage() string
// GetEnvVars returns the env vars for this flag
GetEnvVars() []string
// TakesValue returns true if the flag takes a value, otherwise false // TakesValue returns true if the flag takes a value, otherwise false
TakesValue() bool TakesValue() bool
// GetDefaultText returns the default text for this flag // GetUsage returns the usage string for the flag
GetDefaultText() string GetUsage() string
// GetValue returns the flags value as string representation and an empty // GetValue returns the flags value as string representation and an empty
// string if the flag takes no value at all. // string if the flag takes no value at all.
GetValue() string GetValue() string
RunAction(*Context) error // GetDefaultText returns the default text for this flag
GetDefaultText() string
// GetEnvVars returns the env vars for this flag
GetEnvVars() []string
} }
// DocGenerationFlag is an interface that allows documentation generation for the flag // DocGenerationFlag is an interface that allows documentation generation for the flag
@ -155,6 +164,23 @@ type Countable interface {
Count() int Count() int
} }
// VisibleFlag is an interface that allows to check if a flag is visible
type VisibleFlag interface {
Flag
// IsVisible returns true if the flag is not hidden, otherwise false
IsVisible() bool
}
// CategorizableFlag is an interface that allows us to potentially
// use a flag in a categorized representation.
type CategorizableFlag interface {
VisibleFlag
// Returns the category of the flag
GetCategory() string
}
func flagSet(name string, flags []Flag) (*flag.FlagSet, error) { func flagSet(name string, flags []Flag) (*flag.FlagSet, error) {
set := flag.NewFlagSet(name, flag.ContinueOnError) set := flag.NewFlagSet(name, flag.ContinueOnError)
@ -212,7 +238,7 @@ func normalizeFlags(flags []Flag, set *flag.FlagSet) error {
func visibleFlags(fl []Flag) []Flag { func visibleFlags(fl []Flag) []Flag {
var visible []Flag var visible []Flag
for _, f := range fl { for _, f := range fl {
if f.IsVisible() { if vf, ok := f.(VisibleFlag); ok && vf.IsVisible() {
visible = append(visible, f) visible = append(visible, f)
} }
} }

View File

@ -223,7 +223,10 @@ func TestFlagsFromEnv(t *testing.T) {
defer resetEnv(os.Environ()) defer resetEnv(os.Environ())
os.Clearenv() os.Clearenv()
f := test.flag f, ok := test.flag.(DocGenerationFlag)
if !ok {
t.Errorf("flag %v needs to implement DocGenerationFlag to retrieve env vars", test.flag)
}
envVarSlice := f.GetEnvVars() envVarSlice := f.GetEnvVars()
_ = os.Setenv(envVarSlice[0], test.input) _ = os.Setenv(envVarSlice[0], test.input)
@ -259,6 +262,12 @@ func TestFlagsFromEnv(t *testing.T) {
} }
} }
type nodocFlag struct {
Flag
Name string
}
func TestFlagStringifying(t *testing.T) { func TestFlagStringifying(t *testing.T) {
for _, tc := range []struct { for _, tc := range []struct {
name string name string
@ -435,6 +444,11 @@ func TestFlagStringifying(t *testing.T) {
fl: &UintFlag{Name: "tubes", DefaultText: "13"}, fl: &UintFlag{Name: "tubes", DefaultText: "13"},
expected: "--tubes value\t(default: 13)", expected: "--tubes value\t(default: 13)",
}, },
{
name: "nodoc-flag",
fl: &nodocFlag{Name: "scarecrow"},
expected: "",
},
} { } {
t.Run(tc.name, func(ct *testing.T) { t.Run(tc.name, func(ct *testing.T) {
s := stringifyFlag(tc.fl) s := stringifyFlag(tc.fl)

View File

@ -247,6 +247,13 @@ TYPES
type ActionFunc func(*Context) error type ActionFunc func(*Context) error
ActionFunc is the action to execute when no subcommands are specified ActionFunc is the action to execute when no subcommands are specified
type ActionableFlag interface {
Flag
RunAction(*Context) error
}
ActionableFlag is an interface that wraps Flag interface and RunAction
operation.
type AfterFunc func(*Context) error type AfterFunc func(*Context) error
AfterFunc is an action to execute after any subcommands are run, but after AfterFunc is an action to execute after any subcommands are run, but after
the subcommand has finished it is run even if Action() panics the subcommand has finished it is run even if Action() panics
@ -499,6 +506,15 @@ func (f *BoolFlag) String() string
func (f *BoolFlag) TakesValue() bool func (f *BoolFlag) TakesValue() bool
TakesValue returns true if the flag takes a value, otherwise false TakesValue returns true if the flag takes a value, otherwise false
type CategorizableFlag interface {
VisibleFlag
// Returns the category of the flag
GetCategory() string
}
CategorizableFlag is an interface that allows us to potentially use a flag
in a categorized representation.
type Command struct { type Command struct {
// The name of the command // The name of the command
Name string Name string
@ -716,6 +732,28 @@ type Countable interface {
Countable is an interface to enable detection of flag values which support Countable is an interface to enable detection of flag values which support
repetitive flags repetitive flags
type DocGenerationFlag interface {
Flag
// TakesValue returns true if the flag takes a value, otherwise false
TakesValue() bool
// GetUsage returns the usage string for the flag
GetUsage() string
// GetValue returns the flags value as string representation and an empty
// string if the flag takes no value at all.
GetValue() string
// GetDefaultText returns the default text for this flag
GetDefaultText() string
// GetEnvVars returns the env vars for this flag
GetEnvVars() []string
}
DocGenerationFlag is an interface that allows documentation generation for
the flag
type DurationFlag struct { type DurationFlag struct {
Name string Name string
@ -823,33 +861,6 @@ type Flag interface {
// Whether the flag has been set or not // Whether the flag has been set or not
IsSet() bool IsSet() bool
// whether the flag is a required flag or not
IsRequired() bool
// IsVisible returns true if the flag is not hidden, otherwise false
IsVisible() bool
// Returns the category of the flag
GetCategory() string
// GetUsage returns the usage string for the flag
GetUsage() string
// GetEnvVars returns the env vars for this flag
GetEnvVars() []string
// TakesValue returns true if the flag takes a value, otherwise false
TakesValue() bool
// GetDefaultText returns the default text for this flag
GetDefaultText() string
// GetValue returns the flags value as string representation and an empty
// string if the flag takes no value at all.
GetValue() string
RunAction(*Context) error
} }
Flag is a common interface related to parsing flags in cli. For more Flag is a common interface related to parsing flags in cli. For more
advanced flag parsing techniques, it is recommended that this interface be advanced flag parsing techniques, it is recommended that this interface be
@ -1586,6 +1597,16 @@ func (f *PathFlag) String() string
func (f *PathFlag) TakesValue() bool func (f *PathFlag) TakesValue() bool
TakesValue returns true if the flag takes a value, otherwise false TakesValue returns true if the flag takes a value, otherwise false
type RequiredFlag interface {
Flag
// whether the flag is a required flag or not
IsRequired() bool
}
RequiredFlag is an interface that allows us to mark flags as required
it allows flags required flags to be backwards compatible with the Flag
interface
type Serializer interface { type Serializer interface {
Serialize() string Serialize() string
} }
@ -1623,8 +1644,6 @@ func (x *SliceFlag[T, S, E]) IsVisible() bool
func (x *SliceFlag[T, S, E]) Names() []string func (x *SliceFlag[T, S, E]) Names() []string
func (x *SliceFlag[T, S, E]) RunAction(c *Context) error
func (x *SliceFlag[T, S, E]) SetDestination(slice S) func (x *SliceFlag[T, S, E]) SetDestination(slice S)
func (x *SliceFlag[T, S, E]) SetValue(slice S) func (x *SliceFlag[T, S, E]) SetValue(slice S)
@ -1635,6 +1654,10 @@ func (x *SliceFlag[T, S, E]) TakesValue() bool
type SliceFlagTarget[E any] interface { type SliceFlagTarget[E any] interface {
Flag Flag
RequiredFlag
DocGenerationFlag
VisibleFlag
CategorizableFlag
// SetValue should propagate the given slice to the target, ideally as a new value. // SetValue should propagate the given slice to the target, ideally as a new value.
// Note that a nil slice should nil/clear any existing value (modelled as ~[]E). // Note that a nil slice should nil/clear any existing value (modelled as ~[]E).
@ -2229,11 +2252,19 @@ func (f *UintSliceFlag) String() string
func (f *UintSliceFlag) TakesValue() bool func (f *UintSliceFlag) TakesValue() bool
TakesValue returns true of the flag takes a value, otherwise false TakesValue returns true of the flag takes a value, otherwise false
type VisibleFlag interface {
Flag
// IsVisible returns true if the flag is not hidden, otherwise false
IsVisible() bool
}
VisibleFlag is an interface that allows to check if a flag is visible
type VisibleFlagCategory interface { type VisibleFlagCategory interface {
// Name returns the category name string // Name returns the category name string
Name() string Name() string
// Flags returns a slice of VisibleFlag sorted by name // Flags returns a slice of VisibleFlag sorted by name
Flags() []Flag Flags() []VisibleFlag
} }
VisibleFlagCategory is a category containing flags. VisibleFlagCategory is a category containing flags.

View File

@ -21,6 +21,10 @@ type (
// update). // update).
SliceFlagTarget[E any] interface { SliceFlagTarget[E any] interface {
Flag Flag
RequiredFlag
DocGenerationFlag
VisibleFlag
CategorizableFlag
// SetValue should propagate the given slice to the target, ideally as a new value. // SetValue should propagate the given slice to the target, ideally as a new value.
// Note that a nil slice should nil/clear any existing value (modelled as ~[]E). // Note that a nil slice should nil/clear any existing value (modelled as ~[]E).
@ -110,18 +114,17 @@ func (x *SliceFlag[T, S, E]) GetDestination() S {
return nil return nil
} }
func (x *SliceFlag[T, S, E]) String() string { return x.Target.String() } func (x *SliceFlag[T, S, E]) String() string { return x.Target.String() }
func (x *SliceFlag[T, S, E]) Names() []string { return x.Target.Names() } func (x *SliceFlag[T, S, E]) Names() []string { return x.Target.Names() }
func (x *SliceFlag[T, S, E]) IsSet() bool { return x.Target.IsSet() } func (x *SliceFlag[T, S, E]) IsSet() bool { return x.Target.IsSet() }
func (x *SliceFlag[T, S, E]) IsRequired() bool { return x.Target.IsRequired() } func (x *SliceFlag[T, S, E]) IsRequired() bool { return x.Target.IsRequired() }
func (x *SliceFlag[T, S, E]) TakesValue() bool { return x.Target.TakesValue() } func (x *SliceFlag[T, S, E]) TakesValue() bool { return x.Target.TakesValue() }
func (x *SliceFlag[T, S, E]) GetUsage() string { return x.Target.GetUsage() } func (x *SliceFlag[T, S, E]) GetUsage() string { return x.Target.GetUsage() }
func (x *SliceFlag[T, S, E]) GetValue() string { return x.Target.GetValue() } func (x *SliceFlag[T, S, E]) GetValue() string { return x.Target.GetValue() }
func (x *SliceFlag[T, S, E]) GetDefaultText() string { return x.Target.GetDefaultText() } func (x *SliceFlag[T, S, E]) GetDefaultText() string { return x.Target.GetDefaultText() }
func (x *SliceFlag[T, S, E]) GetEnvVars() []string { return x.Target.GetEnvVars() } func (x *SliceFlag[T, S, E]) GetEnvVars() []string { return x.Target.GetEnvVars() }
func (x *SliceFlag[T, S, E]) IsVisible() bool { return x.Target.IsVisible() } func (x *SliceFlag[T, S, E]) IsVisible() bool { return x.Target.IsVisible() }
func (x *SliceFlag[T, S, E]) GetCategory() string { return x.Target.GetCategory() } func (x *SliceFlag[T, S, E]) GetCategory() string { return x.Target.GetCategory() }
func (x *SliceFlag[T, S, E]) RunAction(c *Context) error { return x.Target.RunAction(c) }
func (x *flagValueHook) Set(value string) error { func (x *flagValueHook) Set(value string) error {
if err := x.value.Set(value); err != nil { if err := x.value.Set(value); err != nil {

View File

@ -247,6 +247,13 @@ TYPES
type ActionFunc func(*Context) error type ActionFunc func(*Context) error
ActionFunc is the action to execute when no subcommands are specified ActionFunc is the action to execute when no subcommands are specified
type ActionableFlag interface {
Flag
RunAction(*Context) error
}
ActionableFlag is an interface that wraps Flag interface and RunAction
operation.
type AfterFunc func(*Context) error type AfterFunc func(*Context) error
AfterFunc is an action to execute after any subcommands are run, but after AfterFunc is an action to execute after any subcommands are run, but after
the subcommand has finished it is run even if Action() panics the subcommand has finished it is run even if Action() panics
@ -499,6 +506,15 @@ func (f *BoolFlag) String() string
func (f *BoolFlag) TakesValue() bool func (f *BoolFlag) TakesValue() bool
TakesValue returns true if the flag takes a value, otherwise false TakesValue returns true if the flag takes a value, otherwise false
type CategorizableFlag interface {
VisibleFlag
// Returns the category of the flag
GetCategory() string
}
CategorizableFlag is an interface that allows us to potentially use a flag
in a categorized representation.
type Command struct { type Command struct {
// The name of the command // The name of the command
Name string Name string
@ -716,6 +732,28 @@ type Countable interface {
Countable is an interface to enable detection of flag values which support Countable is an interface to enable detection of flag values which support
repetitive flags repetitive flags
type DocGenerationFlag interface {
Flag
// TakesValue returns true if the flag takes a value, otherwise false
TakesValue() bool
// GetUsage returns the usage string for the flag
GetUsage() string
// GetValue returns the flags value as string representation and an empty
// string if the flag takes no value at all.
GetValue() string
// GetDefaultText returns the default text for this flag
GetDefaultText() string
// GetEnvVars returns the env vars for this flag
GetEnvVars() []string
}
DocGenerationFlag is an interface that allows documentation generation for
the flag
type DurationFlag struct { type DurationFlag struct {
Name string Name string
@ -823,33 +861,6 @@ type Flag interface {
// Whether the flag has been set or not // Whether the flag has been set or not
IsSet() bool IsSet() bool
// whether the flag is a required flag or not
IsRequired() bool
// IsVisible returns true if the flag is not hidden, otherwise false
IsVisible() bool
// Returns the category of the flag
GetCategory() string
// GetUsage returns the usage string for the flag
GetUsage() string
// GetEnvVars returns the env vars for this flag
GetEnvVars() []string
// TakesValue returns true if the flag takes a value, otherwise false
TakesValue() bool
// GetDefaultText returns the default text for this flag
GetDefaultText() string
// GetValue returns the flags value as string representation and an empty
// string if the flag takes no value at all.
GetValue() string
RunAction(*Context) error
} }
Flag is a common interface related to parsing flags in cli. For more Flag is a common interface related to parsing flags in cli. For more
advanced flag parsing techniques, it is recommended that this interface be advanced flag parsing techniques, it is recommended that this interface be
@ -1586,6 +1597,16 @@ func (f *PathFlag) String() string
func (f *PathFlag) TakesValue() bool func (f *PathFlag) TakesValue() bool
TakesValue returns true if the flag takes a value, otherwise false TakesValue returns true if the flag takes a value, otherwise false
type RequiredFlag interface {
Flag
// whether the flag is a required flag or not
IsRequired() bool
}
RequiredFlag is an interface that allows us to mark flags as required
it allows flags required flags to be backwards compatible with the Flag
interface
type Serializer interface { type Serializer interface {
Serialize() string Serialize() string
} }
@ -1623,8 +1644,6 @@ func (x *SliceFlag[T, S, E]) IsVisible() bool
func (x *SliceFlag[T, S, E]) Names() []string func (x *SliceFlag[T, S, E]) Names() []string
func (x *SliceFlag[T, S, E]) RunAction(c *Context) error
func (x *SliceFlag[T, S, E]) SetDestination(slice S) func (x *SliceFlag[T, S, E]) SetDestination(slice S)
func (x *SliceFlag[T, S, E]) SetValue(slice S) func (x *SliceFlag[T, S, E]) SetValue(slice S)
@ -1635,6 +1654,10 @@ func (x *SliceFlag[T, S, E]) TakesValue() bool
type SliceFlagTarget[E any] interface { type SliceFlagTarget[E any] interface {
Flag Flag
RequiredFlag
DocGenerationFlag
VisibleFlag
CategorizableFlag
// SetValue should propagate the given slice to the target, ideally as a new value. // SetValue should propagate the given slice to the target, ideally as a new value.
// Note that a nil slice should nil/clear any existing value (modelled as ~[]E). // Note that a nil slice should nil/clear any existing value (modelled as ~[]E).
@ -2229,11 +2252,19 @@ func (f *UintSliceFlag) String() string
func (f *UintSliceFlag) TakesValue() bool func (f *UintSliceFlag) TakesValue() bool
TakesValue returns true of the flag takes a value, otherwise false TakesValue returns true of the flag takes a value, otherwise false
type VisibleFlag interface {
Flag
// IsVisible returns true if the flag is not hidden, otherwise false
IsVisible() bool
}
VisibleFlag is an interface that allows to check if a flag is visible
type VisibleFlagCategory interface { type VisibleFlagCategory interface {
// Name returns the category name string // Name returns the category name string
Name() string Name() string
// Flags returns a slice of VisibleFlag sorted by name // Flags returns a slice of VisibleFlag sorted by name
Flags() []Flag Flags() []VisibleFlag
} }
VisibleFlagCategory is a category containing flags. VisibleFlagCategory is a category containing flags.

View File

@ -17,13 +17,13 @@ func TestFloat64SliceFlag_SatisfiesFlagInterface(t *testing.T) {
} }
func TestFloat64SliceFlag_SatisfiesRequiredFlagInterface(t *testing.T) { func TestFloat64SliceFlag_SatisfiesRequiredFlagInterface(t *testing.T) {
var f cli.Flag = &cli.Float64SliceFlag{} var f cli.RequiredFlag = &cli.Float64SliceFlag{}
_ = f.IsRequired() _ = f.IsRequired()
} }
func TestFloat64SliceFlag_SatisfiesVisibleFlagInterface(t *testing.T) { func TestFloat64SliceFlag_SatisfiesVisibleFlagInterface(t *testing.T) {
var f cli.Flag = &cli.Float64SliceFlag{} var f cli.VisibleFlag = &cli.Float64SliceFlag{}
_ = f.IsVisible() _ = f.IsVisible()
} }
@ -36,13 +36,13 @@ func TestGenericFlag_SatisfiesFlagInterface(t *testing.T) {
} }
func TestGenericFlag_SatisfiesRequiredFlagInterface(t *testing.T) { func TestGenericFlag_SatisfiesRequiredFlagInterface(t *testing.T) {
var f cli.Flag = &cli.GenericFlag{} var f cli.RequiredFlag = &cli.GenericFlag{}
_ = f.IsRequired() _ = f.IsRequired()
} }
func TestGenericFlag_SatisfiesVisibleFlagInterface(t *testing.T) { func TestGenericFlag_SatisfiesVisibleFlagInterface(t *testing.T) {
var f cli.Flag = &cli.GenericFlag{} var f cli.VisibleFlag = &cli.GenericFlag{}
_ = f.IsVisible() _ = f.IsVisible()
} }
@ -61,13 +61,13 @@ func TestInt64SliceFlag_SatisfiesFlagInterface(t *testing.T) {
} }
func TestInt64SliceFlag_SatisfiesRequiredFlagInterface(t *testing.T) { func TestInt64SliceFlag_SatisfiesRequiredFlagInterface(t *testing.T) {
var f cli.Flag = &cli.Int64SliceFlag{} var f cli.RequiredFlag = &cli.Int64SliceFlag{}
_ = f.IsRequired() _ = f.IsRequired()
} }
func TestInt64SliceFlag_SatisfiesVisibleFlagInterface(t *testing.T) { func TestInt64SliceFlag_SatisfiesVisibleFlagInterface(t *testing.T) {
var f cli.Flag = &cli.Int64SliceFlag{} var f cli.VisibleFlag = &cli.Int64SliceFlag{}
_ = f.IsVisible() _ = f.IsVisible()
} }
@ -80,13 +80,13 @@ func TestIntSliceFlag_SatisfiesFlagInterface(t *testing.T) {
} }
func TestIntSliceFlag_SatisfiesRequiredFlagInterface(t *testing.T) { func TestIntSliceFlag_SatisfiesRequiredFlagInterface(t *testing.T) {
var f cli.Flag = &cli.IntSliceFlag{} var f cli.RequiredFlag = &cli.IntSliceFlag{}
_ = f.IsRequired() _ = f.IsRequired()
} }
func TestIntSliceFlag_SatisfiesVisibleFlagInterface(t *testing.T) { func TestIntSliceFlag_SatisfiesVisibleFlagInterface(t *testing.T) {
var f cli.Flag = &cli.IntSliceFlag{} var f cli.VisibleFlag = &cli.IntSliceFlag{}
_ = f.IsVisible() _ = f.IsVisible()
} }
@ -99,13 +99,13 @@ func TestPathFlag_SatisfiesFlagInterface(t *testing.T) {
} }
func TestPathFlag_SatisfiesRequiredFlagInterface(t *testing.T) { func TestPathFlag_SatisfiesRequiredFlagInterface(t *testing.T) {
var f cli.Flag = &cli.PathFlag{} var f cli.RequiredFlag = &cli.PathFlag{}
_ = f.IsRequired() _ = f.IsRequired()
} }
func TestPathFlag_SatisfiesVisibleFlagInterface(t *testing.T) { func TestPathFlag_SatisfiesVisibleFlagInterface(t *testing.T) {
var f cli.Flag = &cli.PathFlag{} var f cli.VisibleFlag = &cli.PathFlag{}
_ = f.IsVisible() _ = f.IsVisible()
} }
@ -124,13 +124,13 @@ func TestStringSliceFlag_SatisfiesFlagInterface(t *testing.T) {
} }
func TestStringSliceFlag_SatisfiesRequiredFlagInterface(t *testing.T) { func TestStringSliceFlag_SatisfiesRequiredFlagInterface(t *testing.T) {
var f cli.Flag = &cli.StringSliceFlag{} var f cli.RequiredFlag = &cli.StringSliceFlag{}
_ = f.IsRequired() _ = f.IsRequired()
} }
func TestStringSliceFlag_SatisfiesVisibleFlagInterface(t *testing.T) { func TestStringSliceFlag_SatisfiesVisibleFlagInterface(t *testing.T) {
var f cli.Flag = &cli.StringSliceFlag{} var f cli.VisibleFlag = &cli.StringSliceFlag{}
_ = f.IsVisible() _ = f.IsVisible()
} }
@ -143,13 +143,13 @@ func TestTimestampFlag_SatisfiesFlagInterface(t *testing.T) {
} }
func TestTimestampFlag_SatisfiesRequiredFlagInterface(t *testing.T) { func TestTimestampFlag_SatisfiesRequiredFlagInterface(t *testing.T) {
var f cli.Flag = &cli.TimestampFlag{} var f cli.RequiredFlag = &cli.TimestampFlag{}
_ = f.IsRequired() _ = f.IsRequired()
} }
func TestTimestampFlag_SatisfiesVisibleFlagInterface(t *testing.T) { func TestTimestampFlag_SatisfiesVisibleFlagInterface(t *testing.T) {
var f cli.Flag = &cli.TimestampFlag{} var f cli.VisibleFlag = &cli.TimestampFlag{}
_ = f.IsVisible() _ = f.IsVisible()
} }
@ -182,13 +182,13 @@ func TestBoolFlag_SatisfiesFlagInterface(t *testing.T) {
} }
func TestBoolFlag_SatisfiesRequiredFlagInterface(t *testing.T) { func TestBoolFlag_SatisfiesRequiredFlagInterface(t *testing.T) {
var f cli.Flag = &cli.BoolFlag{} var f cli.RequiredFlag = &cli.BoolFlag{}
_ = f.IsRequired() _ = f.IsRequired()
} }
func TestBoolFlag_SatisfiesVisibleFlagInterface(t *testing.T) { func TestBoolFlag_SatisfiesVisibleFlagInterface(t *testing.T) {
var f cli.Flag = &cli.BoolFlag{} var f cli.VisibleFlag = &cli.BoolFlag{}
_ = f.IsVisible() _ = f.IsVisible()
} }
@ -207,13 +207,13 @@ func TestFloat64Flag_SatisfiesFlagInterface(t *testing.T) {
} }
func TestFloat64Flag_SatisfiesRequiredFlagInterface(t *testing.T) { func TestFloat64Flag_SatisfiesRequiredFlagInterface(t *testing.T) {
var f cli.Flag = &cli.Float64Flag{} var f cli.RequiredFlag = &cli.Float64Flag{}
_ = f.IsRequired() _ = f.IsRequired()
} }
func TestFloat64Flag_SatisfiesVisibleFlagInterface(t *testing.T) { func TestFloat64Flag_SatisfiesVisibleFlagInterface(t *testing.T) {
var f cli.Flag = &cli.Float64Flag{} var f cli.VisibleFlag = &cli.Float64Flag{}
_ = f.IsVisible() _ = f.IsVisible()
} }
@ -232,13 +232,13 @@ func TestIntFlag_SatisfiesFlagInterface(t *testing.T) {
} }
func TestIntFlag_SatisfiesRequiredFlagInterface(t *testing.T) { func TestIntFlag_SatisfiesRequiredFlagInterface(t *testing.T) {
var f cli.Flag = &cli.IntFlag{} var f cli.RequiredFlag = &cli.IntFlag{}
_ = f.IsRequired() _ = f.IsRequired()
} }
func TestIntFlag_SatisfiesVisibleFlagInterface(t *testing.T) { func TestIntFlag_SatisfiesVisibleFlagInterface(t *testing.T) {
var f cli.Flag = &cli.IntFlag{} var f cli.VisibleFlag = &cli.IntFlag{}
_ = f.IsVisible() _ = f.IsVisible()
} }
@ -257,13 +257,13 @@ func TestInt64Flag_SatisfiesFlagInterface(t *testing.T) {
} }
func TestInt64Flag_SatisfiesRequiredFlagInterface(t *testing.T) { func TestInt64Flag_SatisfiesRequiredFlagInterface(t *testing.T) {
var f cli.Flag = &cli.Int64Flag{} var f cli.RequiredFlag = &cli.Int64Flag{}
_ = f.IsRequired() _ = f.IsRequired()
} }
func TestInt64Flag_SatisfiesVisibleFlagInterface(t *testing.T) { func TestInt64Flag_SatisfiesVisibleFlagInterface(t *testing.T) {
var f cli.Flag = &cli.Int64Flag{} var f cli.VisibleFlag = &cli.Int64Flag{}
_ = f.IsVisible() _ = f.IsVisible()
} }
@ -282,13 +282,13 @@ func TestStringFlag_SatisfiesFlagInterface(t *testing.T) {
} }
func TestStringFlag_SatisfiesRequiredFlagInterface(t *testing.T) { func TestStringFlag_SatisfiesRequiredFlagInterface(t *testing.T) {
var f cli.Flag = &cli.StringFlag{} var f cli.RequiredFlag = &cli.StringFlag{}
_ = f.IsRequired() _ = f.IsRequired()
} }
func TestStringFlag_SatisfiesVisibleFlagInterface(t *testing.T) { func TestStringFlag_SatisfiesVisibleFlagInterface(t *testing.T) {
var f cli.Flag = &cli.StringFlag{} var f cli.VisibleFlag = &cli.StringFlag{}
_ = f.IsVisible() _ = f.IsVisible()
} }
@ -307,13 +307,13 @@ func TestDurationFlag_SatisfiesFlagInterface(t *testing.T) {
} }
func TestDurationFlag_SatisfiesRequiredFlagInterface(t *testing.T) { func TestDurationFlag_SatisfiesRequiredFlagInterface(t *testing.T) {
var f cli.Flag = &cli.DurationFlag{} var f cli.RequiredFlag = &cli.DurationFlag{}
_ = f.IsRequired() _ = f.IsRequired()
} }
func TestDurationFlag_SatisfiesVisibleFlagInterface(t *testing.T) { func TestDurationFlag_SatisfiesVisibleFlagInterface(t *testing.T) {
var f cli.Flag = &cli.DurationFlag{} var f cli.VisibleFlag = &cli.DurationFlag{}
_ = f.IsVisible() _ = f.IsVisible()
} }
@ -332,13 +332,13 @@ func TestUintFlag_SatisfiesFlagInterface(t *testing.T) {
} }
func TestUintFlag_SatisfiesRequiredFlagInterface(t *testing.T) { func TestUintFlag_SatisfiesRequiredFlagInterface(t *testing.T) {
var f cli.Flag = &cli.UintFlag{} var f cli.RequiredFlag = &cli.UintFlag{}
_ = f.IsRequired() _ = f.IsRequired()
} }
func TestUintFlag_SatisfiesVisibleFlagInterface(t *testing.T) { func TestUintFlag_SatisfiesVisibleFlagInterface(t *testing.T) {
var f cli.Flag = &cli.UintFlag{} var f cli.VisibleFlag = &cli.UintFlag{}
_ = f.IsVisible() _ = f.IsVisible()
} }
@ -357,13 +357,13 @@ func TestUint64Flag_SatisfiesFlagInterface(t *testing.T) {
} }
func TestUint64Flag_SatisfiesRequiredFlagInterface(t *testing.T) { func TestUint64Flag_SatisfiesRequiredFlagInterface(t *testing.T) {
var f cli.Flag = &cli.Uint64Flag{} var f cli.RequiredFlag = &cli.Uint64Flag{}
_ = f.IsRequired() _ = f.IsRequired()
} }
func TestUint64Flag_SatisfiesVisibleFlagInterface(t *testing.T) { func TestUint64Flag_SatisfiesVisibleFlagInterface(t *testing.T) {
var f cli.Flag = &cli.Uint64Flag{} var f cli.VisibleFlag = &cli.Uint64Flag{}
_ = f.IsVisible() _ = f.IsVisible()
} }