MCPcopy
hub / github.com/urfave/cli / parseFlags

Method parseFlags

command_parse.go:25–251  ·  view source on GitHub ↗
(args Args)

Source from the content-addressed store, hash-verified

23}
24
25func (cmd *Command) parseFlags(args Args) (Args, error) {
26 tracef("parsing flags from arguments %[1]q (cmd=%[2]q)", args, cmd.Name)
27
28 cmd.setFlags = map[Flag]struct{}{}
29 cmd.appliedFlags = cmd.allFlags()
30
31 tracef("walking command lineage for persistent flags (cmd=%[1]q)", cmd.Name)
32
33 for pCmd := cmd.parent; pCmd != nil; pCmd = pCmd.parent {
34 tracef(
35 "checking ancestor command=%[1]q for persistent flags (cmd=%[2]q)",
36 pCmd.Name, cmd.Name,
37 )
38
39 for _, fl := range pCmd.allFlags() {
40 flNames := fl.Names()
41
42 pfl, ok := fl.(LocalFlag)
43 if !ok || pfl.IsLocal() {
44 tracef("skipping non-persistent flag %[1]q (cmd=%[2]q)", flNames, cmd.Name)
45 continue
46 }
47
48 tracef(
49 "checking for applying persistent flag=%[1]q pCmd=%[2]q (cmd=%[3]q)",
50 flNames, pCmd.Name, cmd.Name,
51 )
52
53 applyPersistentFlag := true
54
55 for _, name := range flNames {
56 if cmd.lFlag(name) != nil {
57 applyPersistentFlag = false
58 break
59 }
60 }
61
62 if !applyPersistentFlag {
63 tracef("not applying as persistent flag=%[1]q (cmd=%[2]q)", flNames, cmd.Name)
64 continue
65 }
66
67 tracef("applying as persistent flag=%[1]q (cmd=%[2]q)", flNames, cmd.Name)
68
69 tracef("appending to applied flags flag=%[1]q (cmd=%[2]q)", flNames, cmd.Name)
70 cmd.appliedFlags = append(cmd.appliedFlags, fl)
71 }
72 }
73
74 tracef("parsing flags iteratively tail=%[1]q (cmd=%[2]q)", args.Tail(), cmd.Name)
75 defer tracef("done parsing flags (cmd=%[1]q)", cmd.Name)
76
77 posArgs := []string{}
78 for rargs := args.Slice(); len(rargs) > 0; rargs = rargs[1:] {
79 tracef("rearrange:1 (cmd=%[1]q) %[2]q", cmd.Name, rargs)
80
81 firstArg := strings.TrimSpace(rargs[0])
82 if len(firstArg) == 0 {

Callers 1

runMethod · 0.95

Calls 14

allFlagsMethod · 0.95
lFlagMethod · 0.95
RootMethod · 0.95
CommandMethod · 0.95
lookupAppliedFlagMethod · 0.95
setMethod · 0.95
lookupFlagMethod · 0.95
tracefFunction · 0.85
NamesMethod · 0.65
IsLocalMethod · 0.65
TailMethod · 0.65

Tested by

no test coverage detected