Skip to content

Commit

Permalink
add active member to nodes and values
Browse files Browse the repository at this point in the history
  • Loading branch information
pyqlsa committed Jul 17, 2022
1 parent f9bc630 commit 8147596
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 2 deletions.
2 changes: 2 additions & 0 deletions context.go
Expand Up @@ -346,6 +346,7 @@ func (c *Context) endParsing() {

func (c *Context) trace(node *Node) (err error) { // nolint: gocyclo
positional := 0
node.Active = true

flags := []*Flag{}
flagNode := node
Expand Down Expand Up @@ -438,6 +439,7 @@ func (c *Context) trace(node *Node) (err error) { // nolint: gocyclo
c.endParsing()
}

arg.Active = true
err := arg.Parse(c.scan, c.getValue(arg))
if err != nil {
return err
Expand Down
4 changes: 2 additions & 2 deletions mapper.go
Expand Up @@ -613,7 +613,7 @@ func existingFileMapper(r *Registry) MapperFunc {
return err
}

if ctx.Value.Set {
if !ctx.Value.Active || ctx.Value.Set {
// early return to avoid checking extra files that may not exist;
// this hack only works because the value provided on the cli is
// checked before the default value is checked (if default is set).
Expand Down Expand Up @@ -649,7 +649,7 @@ func existingDirMapper(r *Registry) MapperFunc {
return err
}

if ctx.Value.Set {
if !ctx.Value.Active || ctx.Value.Set {
// early return to avoid checking extra dirs that may not exist;
// this hack only works because the value provided on the cli is
// checked before the default value is checked (if default is set).
Expand Down
44 changes: 44 additions & 0 deletions mapper_test.go
Expand Up @@ -453,6 +453,28 @@ func TestExistingFileMapperDefaultMissing(t *testing.T) {
assert.NoError(t, err)
assert.NotZero(t, cli.File)
assert.Contains(t, cli.File, file)
p = mustNew(t, &cli)
_, err = p.Parse([]string{})
assert.Error(t, err)
assert.Contains(t, err.Error(), "missing.txt: no such file or directory")
}

func TestExistingFileMapperDefaultMissingCmds(t *testing.T) {
type CLI struct {
CmdA struct {
FileA string `type:"existingfile" default:"testdata/aaa-missing.txt"`
} `cmd:""`
CmdB struct {
FileB string `type:"existingfile" default:"testdata/bbb-missing.txt"`
} `cmd:""`
}
var cli CLI
p := mustNew(t, &cli)
file := "testdata/file.txt"
_, err := p.Parse([]string{"cmd-a", "--file-a", file})
assert.NoError(t, err)
assert.NotZero(t, cli.CmdA.FileA)
assert.Contains(t, cli.CmdA.FileA, file)
}

//nolint:dupl
Expand Down Expand Up @@ -486,6 +508,28 @@ func TestExistingDirMapperDefaultMissing(t *testing.T) {
assert.NoError(t, err)
assert.NotZero(t, cli.Dir)
assert.Contains(t, cli.Dir, dir)
p = mustNew(t, &cli)
_, err = p.Parse([]string{})
assert.Error(t, err)
assert.Contains(t, err.Error(), "missing-dir: no such file or directory")
}

func TestExistingDirMapperDefaultMissingCmds(t *testing.T) {
type CLI struct {
CmdA struct {
DirA string `type:"existingdir" default:"aaa-missing-dir"`
} `cmd:""`
CmdB struct {
DirB string `type:"existingdir" default:"bbb-missing-dir"`
} `cmd:""`
}
var cli CLI
p := mustNew(t, &cli)
dir := "testdata"
_, err := p.Parse([]string{"cmd-a", "--dir-a", dir})
assert.NoError(t, err)
assert.NotZero(t, cli.CmdA.DirA)
assert.Contains(t, cli.CmdA.DirA, dir)
}

func TestMapperPlaceHolder(t *testing.T) {
Expand Down
3 changes: 3 additions & 0 deletions model.go
Expand Up @@ -54,6 +54,7 @@ type Node struct {
Tag *Tag
Aliases []string
Passthrough bool // Set to true to stop flag parsing when encountered.
Active bool // Denotes the node is part of an active branch in the CLI.

Argument *Value // Populated when Type is ArgumentNode.
}
Expand Down Expand Up @@ -98,6 +99,7 @@ func (n *Node) AllFlags(hide bool) (out [][]*Flag) {
group := []*Flag{}
for _, flag := range n.Flags {
if !hide || !flag.Hidden {
flag.Active = true
group = append(group, flag)
}
}
Expand Down Expand Up @@ -243,6 +245,7 @@ type Value struct {
Format string // Formatting directive, if applicable.
Position int // Position (for positional arguments).
Passthrough bool // Set to true to stop flag parsing when encountered.
Active bool // Denotes the value is part of an active branch in the CLI.
}

// EnumMap returns a map of the enums in this value.
Expand Down

0 comments on commit 8147596

Please sign in to comment.