summaryrefslogtreecommitdiff
path: root/compflag/gen/main.go
diff options
context:
space:
mode:
authorEyal Posener <[email protected]>2020-05-09 14:18:11 +0300
committerGitHub <[email protected]>2020-05-09 14:18:11 +0300
commitbe08f3c4229efa432ebf26da112572e1f7e6a65e (patch)
treea0b54d2e0790e20d300a0ff4e501e97268014a91 /compflag/gen/main.go
parente6d850dd6bc6aaecbaf5391412d1426fbb5ffaf5 (diff)
parent41182b029c6a536f917139a7e27be08cc3a50d23 (diff)
Merge pull request #122 from posener/gen
Autogenerate compflag code
Diffstat (limited to 'compflag/gen/main.go')
-rw-r--r--compflag/gen/main.go67
1 files changed, 67 insertions, 0 deletions
diff --git a/compflag/gen/main.go b/compflag/gen/main.go
new file mode 100644
index 0000000..cbea96f
--- /dev/null
+++ b/compflag/gen/main.go
@@ -0,0 +1,67 @@
+// Generates flags.go.
+package main
+
+import (
+ "log"
+ "os"
+ "path/filepath"
+ "strings"
+ "text/template"
+
+ "github.com/posener/script"
+)
+
+const tmplGlob = "gen/*.go.gotmpl"
+
+type flag struct {
+ Name string
+ Type string
+ IsBool bool
+ CustomPredict bool
+}
+
+func (f flag) NewInternalTypeFuncName() string {
+ return "new" + strings.Title(f.InternalTypeName())
+}
+
+func (f flag) InternalTypeName() string {
+ return strings.ToLower(f.Name[:1]) + f.Name[1:] + "Value"
+}
+
+var flags = []flag{
+ {Name: "String", Type: "string"},
+ {Name: "Bool", Type: "bool", IsBool: true, CustomPredict: true},
+ {Name: "Int", Type: "int"},
+ {Name: "Duration", Type: "time.Duration"},
+}
+
+var tmpl = template.Must(template.ParseGlob(tmplGlob))
+
+func main() {
+ for _, t := range tmpl.Templates() {
+ fileName := outFileName(t.Name())
+ f, err := os.Create(fileName)
+ if err != nil {
+ panic(err)
+ }
+ defer f.Close()
+
+ log.Printf("Writing %s", fileName)
+ err = t.Execute(f, flags)
+ if err != nil {
+ panic(err)
+ }
+
+ // Format the file.
+ err = script.ExecHandleStderr(os.Stderr, "goimports", "-w", fileName).ToStdout()
+ if err != nil {
+ panic(err)
+ }
+ }
+}
+
+func outFileName(templateName string) string {
+ name := filepath.Base(templateName)
+ // Remove .gotmpl suffix.
+ return name[:strings.LastIndex(name, ".")]
+}