Skip to content

Commit 7fe4634

Browse files
committed
up: gflag - refactor and update some flag parse logic
1 parent 01d0e0c commit 7fe4634

File tree

5 files changed

+40
-26
lines changed

5 files changed

+40
-26
lines changed
File renamed without changes.

gflag/flags.go

+20-20
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ type Flags struct {
2626
AfterParse func(fs *Flags) error
2727

2828
// cfg option for the flags
29-
cfg *FlagsConfig
29+
cfg *Config
3030
// the options flag set
3131
fSet *flag.FlagSet
3232
// buf for build help message
@@ -53,8 +53,8 @@ type Flags struct {
5353
Arguments
5454
}
5555

56-
func newDefaultFlagConfig() *FlagsConfig {
57-
return &FlagsConfig{
56+
func newDefaultFlagConfig() *Config {
57+
return &Config{
5858
Alignment: AlignLeft,
5959
TagName: FlagTagName,
6060
}
@@ -98,7 +98,7 @@ func (fs *Flags) InitFlagSet(name string) {
9898
}
9999

100100
// SetConfig for the object.
101-
func (fs *Flags) SetConfig(opt *FlagsConfig) { fs.cfg = opt }
101+
func (fs *Flags) SetConfig(opt *Config) { fs.cfg = opt }
102102

103103
// UseSimpleRule for the parse tag value rule string. see TagRuleSimple
104104
func (fs *Flags) UseSimpleRule() *Flags {
@@ -107,7 +107,7 @@ func (fs *Flags) UseSimpleRule() *Flags {
107107
}
108108

109109
// WithConfigFn for the object.
110-
func (fs *Flags) WithConfigFn(fns ...func(cfg *FlagsConfig)) *Flags {
110+
func (fs *Flags) WithConfigFn(fns ...func(cfg *Config)) *Flags {
111111
for _, fn := range fns {
112112
fn(fs.cfg)
113113
}
@@ -292,7 +292,7 @@ func (fs *Flags) FromStruct(ptr any) error {
292292
optName = strutil.SnakeCase(name, "-")
293293
}
294294

295-
meta := newFlagMeta(optName, mp["desc"], mp["default"], mp["shorts"])
295+
meta := newFlagOpt(optName, mp["desc"], mp["default"], mp["shorts"])
296296
if must, has := mp["required"]; has {
297297
meta.Required = strutil.MustBool(must)
298298
}
@@ -343,7 +343,7 @@ func (fs *Flags) FromStruct(ptr any) error {
343343

344344
// Bool binding a bool option flag, return pointer
345345
func (fs *Flags) Bool(name, shorts string, defVal bool, desc string) *bool {
346-
meta := newFlagMeta(name, desc, defVal, shorts)
346+
meta := newFlagOpt(name, desc, defVal, shorts)
347347
name = fs.checkFlagInfo(meta)
348348

349349
// binding option to flag.FlagSet
@@ -358,7 +358,7 @@ func (fs *Flags) BoolVar(p *bool, meta *FlagMeta) { fs.boolOpt(p, meta) }
358358

359359
// BoolOpt binding a bool option
360360
func (fs *Flags) BoolOpt(p *bool, name, shorts string, defVal bool, desc string) {
361-
fs.boolOpt(p, newFlagMeta(name, desc, defVal, shorts))
361+
fs.boolOpt(p, newFlagOpt(name, desc, defVal, shorts))
362362
}
363363

364364
// binding option and shorts
@@ -378,7 +378,7 @@ func (fs *Flags) Float64Var(p *float64, meta *FlagMeta) { fs.float64Opt(p, meta)
378378

379379
// Float64Opt binding a float64 option
380380
func (fs *Flags) Float64Opt(p *float64, name, shorts string, defVal float64, desc string) {
381-
fs.float64Opt(p, newFlagMeta(name, desc, defVal, shorts))
381+
fs.float64Opt(p, newFlagOpt(name, desc, defVal, shorts))
382382
}
383383

384384
func (fs *Flags) float64Opt(p *float64, meta *FlagMeta) {
@@ -394,7 +394,7 @@ func (fs *Flags) float64Opt(p *float64, meta *FlagMeta) {
394394

395395
// Str binding an string option flag, return pointer
396396
func (fs *Flags) Str(name, shorts string, defValue, desc string) *string {
397-
meta := newFlagMeta(name, desc, defValue, shorts)
397+
meta := newFlagOpt(name, desc, defValue, shorts)
398398
name = fs.checkFlagInfo(meta)
399399

400400
// binding option to flag.FlagSet
@@ -409,7 +409,7 @@ func (fs *Flags) StrVar(p *string, meta *FlagMeta) { fs.strOpt(p, meta) }
409409

410410
// StrOpt binding an string option
411411
func (fs *Flags) StrOpt(p *string, name, shorts, defValue, desc string) {
412-
fs.strOpt(p, newFlagMeta(name, desc, defValue, shorts))
412+
fs.strOpt(p, newFlagOpt(name, desc, defValue, shorts))
413413
}
414414

415415
// binding option and shorts
@@ -426,7 +426,7 @@ func (fs *Flags) strOpt(p *string, meta *FlagMeta) {
426426

427427
// Int binding an int option flag, return pointer
428428
func (fs *Flags) Int(name, shorts string, defValue int, desc string) *int {
429-
meta := newFlagMeta(name, desc, defValue, shorts)
429+
meta := newFlagOpt(name, desc, defValue, shorts)
430430
name = fs.checkFlagInfo(meta)
431431

432432
// binding option to flag.FlagSet
@@ -441,7 +441,7 @@ func (fs *Flags) IntVar(p *int, meta *FlagMeta) { fs.intOpt(p, meta) }
441441

442442
// IntOpt binding an int option
443443
func (fs *Flags) IntOpt(p *int, name, shorts string, defValue int, desc string) {
444-
fs.intOpt(p, newFlagMeta(name, desc, defValue, shorts))
444+
fs.intOpt(p, newFlagOpt(name, desc, defValue, shorts))
445445
}
446446

447447
func (fs *Flags) intOpt(p *int, meta *FlagMeta) {
@@ -455,7 +455,7 @@ func (fs *Flags) intOpt(p *int, meta *FlagMeta) {
455455

456456
// Int64 binding an int64 option flag, return pointer
457457
func (fs *Flags) Int64(name, shorts string, defValue int64, desc string) *int64 {
458-
meta := newFlagMeta(name, desc, defValue, shorts)
458+
meta := newFlagOpt(name, desc, defValue, shorts)
459459
name = fs.checkFlagInfo(meta)
460460

461461
// binding option to flag.FlagSet
@@ -470,7 +470,7 @@ func (fs *Flags) Int64Var(p *int64, meta *FlagMeta) { fs.int64Opt(p, meta) }
470470

471471
// Int64Opt binding an int64 option
472472
func (fs *Flags) Int64Opt(p *int64, name, shorts string, defValue int64, desc string) {
473-
fs.int64Opt(p, newFlagMeta(name, desc, defValue, shorts))
473+
fs.int64Opt(p, newFlagOpt(name, desc, defValue, shorts))
474474
}
475475

476476
func (fs *Flags) int64Opt(p *int64, meta *FlagMeta) {
@@ -486,7 +486,7 @@ func (fs *Flags) int64Opt(p *int64, meta *FlagMeta) {
486486

487487
// Uint binding an int option flag, return pointer
488488
func (fs *Flags) Uint(name, shorts string, defVal uint, desc string) *uint {
489-
meta := newFlagMeta(name, desc, defVal, shorts)
489+
meta := newFlagOpt(name, desc, defVal, shorts)
490490
name = fs.checkFlagInfo(meta)
491491

492492
// binding option to flag.FlagSet
@@ -501,7 +501,7 @@ func (fs *Flags) UintVar(p *uint, meta *FlagMeta) { fs.uintOpt(p, meta) }
501501

502502
// UintOpt binding an uint option
503503
func (fs *Flags) UintOpt(p *uint, name, shorts string, defValue uint, desc string) {
504-
fs.uintOpt(p, newFlagMeta(name, desc, defValue, shorts))
504+
fs.uintOpt(p, newFlagOpt(name, desc, defValue, shorts))
505505
}
506506

507507
func (fs *Flags) uintOpt(p *uint, meta *FlagMeta) {
@@ -515,7 +515,7 @@ func (fs *Flags) uintOpt(p *uint, meta *FlagMeta) {
515515

516516
// Uint64 binding an int option flag, return pointer
517517
func (fs *Flags) Uint64(name, shorts string, defVal uint64, desc string) *uint64 {
518-
meta := newFlagMeta(name, desc, defVal, shorts)
518+
meta := newFlagOpt(name, desc, defVal, shorts)
519519
name = fs.checkFlagInfo(meta)
520520

521521
p := fs.fSet.Uint64(name, defVal, meta.Desc)
@@ -529,7 +529,7 @@ func (fs *Flags) Uint64Var(p *uint64, meta *FlagMeta) { fs.uint64Opt(p, meta) }
529529

530530
// Uint64Opt binding an uint64 option
531531
func (fs *Flags) Uint64Opt(p *uint64, name, shorts string, defVal uint64, desc string) {
532-
fs.uint64Opt(p, newFlagMeta(name, desc, defVal, shorts))
532+
fs.uint64Opt(p, newFlagOpt(name, desc, defVal, shorts))
533533
}
534534

535535
// binding option and shorts
@@ -552,7 +552,7 @@ func (fs *Flags) Var(p flag.Value, meta *FlagMeta) { fs.varOpt(p, meta) }
552552
// var names gcli.Strings
553553
// cmd.VarOpt(&names, "tables", "t", "description ...")
554554
func (fs *Flags) VarOpt(p flag.Value, name, shorts, desc string) {
555-
fs.varOpt(p, newFlagMeta(name, desc, nil, shorts))
555+
fs.varOpt(p, newFlagOpt(name, desc, nil, shorts))
556556
}
557557

558558
// binding option and shorts

gflag/gflag.go

+9-2
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,11 @@ const (
2828
// FlagTagName default tag name on struct
2929
var FlagTagName = "flag"
3030

31-
// FlagsConfig for render help information
32-
type FlagsConfig struct {
31+
// FlagsConfig alias of Config
32+
type FlagsConfig = Config
33+
34+
// Config for render help information
35+
type Config struct {
3336
// WithoutType don't display flag data type on print help
3437
WithoutType bool
3538
// DescNewline flag desc at new line on print help
@@ -49,3 +52,7 @@ type OptCategory struct {
4952
Name, Title string
5053
OptNames []string
5154
}
55+
56+
// Parser struct. Parser, Binder, Manager TODO remove flag.FlagSet
57+
type Parser struct {
58+
}

gflag/opts.go

+4-2
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,12 @@ type Option struct {
4242
Required bool
4343
// Validator support validate the option flag value
4444
Validator func(val string) error
45+
// TODO interactive question for collect value
46+
Question string
4547
}
4648

47-
// newFlagMeta quick create an FlagMeta
48-
func newFlagMeta(name, desc string, defVal any, shortcut string) *Option {
49+
// newFlagOpt quick create an FlagMeta
50+
func newFlagOpt(name, desc string, defVal any, shortcut string) *Option {
4951
return &Option{
5052
Name: name,
5153
Desc: desc,

gflag/util.go

+7-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ func getRequiredMark(must bool) string {
2424
}
2525

2626
// allowed keys on struct tag.
27-
var flagTagKeys = arrutil.Strings{"name", "shorts", "desc", "default", "required"}
27+
var flagTagKeys = arrutil.Strings{"name", "desc", "required", "default", "shorts"}
2828

2929
// parse tag named k-v value. item split by ';'
3030
//
@@ -37,6 +37,8 @@ var flagTagKeys = arrutil.Strings{"name", "shorts", "desc", "default", "required
3737
// shorts
3838
// required
3939
// default
40+
//
41+
// TODO use structs.ParseTagValueNamed()
4042
func parseNamedRule(name, rule string) (mp map[string]string) {
4143
ss := strutil.Split(rule, ";")
4244
if len(ss) == 0 {
@@ -62,12 +64,13 @@ func parseNamedRule(name, rule string) (mp map[string]string) {
6264

6365
// ParseSimpleRule struct tag value use simple rule. each item split by ';'
6466
//
67+
// - format: "name;desc;required;default;shorts"
6568
// - format: "desc;required;default;shorts"
6669
//
6770
// eg:
6871
//
6972
// "int option message;required;i"
70-
// "int option message;;a,b"
73+
// "opt-name;int option message;;a,b"
7174
// "int option message;;a,b;23"
7275
//
7376
// returns field name:
@@ -77,6 +80,8 @@ func parseNamedRule(name, rule string) (mp map[string]string) {
7780
// shorts
7881
// required
7982
// default
83+
//
84+
// TODO use structs.ParseTagValueDefine() and support name.
8085
func ParseSimpleRule(name, rule string) (mp map[string]string) {
8186
ss := strutil.SplitNTrimmed(rule, ";", 4)
8287
ln := len(ss)

0 commit comments

Comments
 (0)