Chore: Add altsrc flag definition generation
This commit is contained in:
@@ -25,4 +25,5 @@ show-cover:
|
||||
|
||||
.PHONY: run
|
||||
run: build
|
||||
./urfave-cli-genflags
|
||||
./urfave-cli-genflags
|
||||
./urfave-cli-genflags -f altsrc/flag-spec.yaml -o altsrc/flag_generated.go -p altsrc -a
|
||||
|
34
cmd/urfave-cli-genflags/generated_altsrc.gotmpl
Normal file
34
cmd/urfave-cli-genflags/generated_altsrc.gotmpl
Normal file
@@ -0,0 +1,34 @@
|
||||
// WARNING: this file is generated. DO NOT EDIT
|
||||
|
||||
package {{.PackageName}}
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"github.com/urfave/cli/v2"
|
||||
)
|
||||
|
||||
{{range .SortedFlagTypes}}
|
||||
// {{.TypeName}} is the flag type that wraps cli.{{.TypeName}} to allow
|
||||
// for other values to be specified
|
||||
type {{.TypeName}} struct {
|
||||
*cli.{{.TypeName}}
|
||||
set *flag.FlagSet
|
||||
}
|
||||
|
||||
// New{{.TypeName}} creates a new {{.TypeName}}
|
||||
func New{{.TypeName}}(fl *cli.{{.TypeName}}) *{{.TypeName}} {
|
||||
return &{{.TypeName}}{{"{"}}{{.TypeName}}: fl, set: nil}
|
||||
}
|
||||
|
||||
// Apply saves the flagSet for later usage calls, then calls
|
||||
// the wrapped {{.TypeName}}.Apply
|
||||
func (f *{{.TypeName}}) Apply(set *flag.FlagSet) error {
|
||||
f.set = set
|
||||
return f.{{.TypeName}}.Apply(set)
|
||||
}
|
||||
{{end}}{{/* /range .SortedFlagTypes */}}
|
||||
|
||||
// vim{{/* 👻 */}}:ro
|
||||
{{/*
|
||||
vim:filetype=gotexttmpl
|
||||
*/}}
|
@@ -32,6 +32,9 @@ var (
|
||||
//go:embed generated_test.gotmpl
|
||||
TestTemplateString string
|
||||
|
||||
//go:embed generated_altsrc.gotmpl
|
||||
AltsrcTemplateString string
|
||||
|
||||
titler = cases.Title(language.Und, cases.NoLower)
|
||||
)
|
||||
|
||||
@@ -58,6 +61,10 @@ func main() {
|
||||
Name: "genflags",
|
||||
Usage: "Generate flag types for urfave/cli",
|
||||
Flags: []cli.Flag{
|
||||
&cli.BoolFlag{
|
||||
Name: "altsrc",
|
||||
Aliases: []string{"a"},
|
||||
},
|
||||
&cli.PathFlag{
|
||||
Name: "flag-spec-yaml",
|
||||
Aliases: []string{"f"},
|
||||
@@ -148,12 +155,11 @@ func runGenFlags(cCtx *cli.Context) error {
|
||||
spec.UrfaveCLITestNamespace = "cli."
|
||||
}
|
||||
|
||||
genTmpl, err := template.New("gen").Parse(TemplateString)
|
||||
if err != nil {
|
||||
return err
|
||||
templateString := TemplateString
|
||||
if cCtx.IsSet("altsrc") {
|
||||
templateString = AltsrcTemplateString
|
||||
}
|
||||
|
||||
genTestTmpl, err := template.New("gen_test").Parse(TestTemplateString)
|
||||
genTmpl, err := template.New("gen").Parse(templateString)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -163,27 +169,33 @@ func runGenFlags(cCtx *cli.Context) error {
|
||||
return err
|
||||
}
|
||||
|
||||
genTestBuf := &bytes.Buffer{}
|
||||
if err := genTestTmpl.Execute(genTestBuf, spec); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := os.WriteFile(cCtx.Path("generated-output"), genBuf.Bytes(), 0644); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := os.WriteFile(cCtx.Path("generated-test-output"), genTestBuf.Bytes(), 0644); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if _, err := sh(cCtx.Context, cCtx.Path("goimports"), "-w", cCtx.Path("generated-output")); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if _, err := sh(cCtx.Context, cCtx.Path("goimports"), "-w", cCtx.Path("generated-test-output")); err != nil {
|
||||
return err
|
||||
}
|
||||
if !cCtx.IsSet("altsrc") {
|
||||
genTestTmpl, err := template.New("gen_test").Parse(TestTemplateString)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
genTestBuf := &bytes.Buffer{}
|
||||
if err := genTestTmpl.Execute(genTestBuf, spec); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := os.WriteFile(cCtx.Path("generated-test-output"), genTestBuf.Bytes(), 0644); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if _, err := sh(cCtx.Context, cCtx.Path("goimports"), "-w", cCtx.Path("generated-test-output")); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user