Skip to content

Commit

Permalink
Add countable interface
Browse files Browse the repository at this point in the history
  • Loading branch information
dearchap committed Sep 5, 2022
1 parent 4508323 commit 15722a5
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 6 deletions.
8 changes: 3 additions & 5 deletions context.go
Expand Up @@ -105,13 +105,11 @@ func (cCtx *Context) Lineage() []*Context {
return lineage
}

// NumOccurrences returns the num of occurences of this flag
// Count returns the num of occurences of this flag
func (cCtx *Context) Count(name string) int {
if fs := cCtx.lookupFlagSet(name); fs != nil {
if bf, ok := fs.Lookup(name).Value.(*boolValue); ok {
if bf.count != nil {
return *bf.count
}
if cf, ok := fs.Lookup(name).Value.(Countable); ok {
return cf.Count()
}
}
return 0
Expand Down
6 changes: 6 additions & 0 deletions flag.go
Expand Up @@ -139,6 +139,12 @@ type CategorizableFlag interface {
GetCategory() string
}

// Countable is an interface to enable detection of flag values which support
// repetitive flags
type Countable interface {
Count() int
}

func flagSet(name string, flags []Flag) (*flag.FlagSet, error) {
set := flag.NewFlagSet(name, flag.ContinueOnError)

Expand Down
7 changes: 7 additions & 0 deletions flag_bool.go
Expand Up @@ -51,6 +51,13 @@ func (b *boolValue) String() string {

func (b *boolValue) IsBoolFlag() bool { return true }

func (b *boolValue) Count() int {
if b.count != nil {
return *b.count
}
return 0
}

// TakesValue returns true of the flag takes a value, otherwise false
func (f *BoolFlag) TakesValue() bool {
return false
Expand Down
8 changes: 7 additions & 1 deletion godoc-current.txt
Expand Up @@ -634,7 +634,7 @@ func (cCtx *Context) Bool(name string) bool
Bool looks up the value of a local BoolFlag, returns false if not found

func (cCtx *Context) Count(name string) int
NumOccurrences returns the num of occurences of this flag
Count returns the num of occurences of this flag

func (cCtx *Context) Duration(name string) time.Duration
Duration looks up the value of a local DurationFlag, returns 0 if not found
Expand Down Expand Up @@ -708,6 +708,12 @@ func (cCtx *Context) Uint64(name string) uint64
func (cCtx *Context) Value(name string) interface{}
Value returns the value of the flag corresponding to `name`

type Countable interface {
Count() int
}
Countable is an interface to enable detection of flag values which support
repetitive flags

type DocGenerationFlag interface {
Flag

Expand Down

0 comments on commit 15722a5

Please sign in to comment.