From 57a7965db5ffec6a1a089b3aecedded95aefcfc8 Mon Sep 17 00:00:00 2001 From: Victor Starodub Date: Fri, 25 Mar 2016 13:36:51 +0300 Subject: [PATCH] Closes #3: Output is formatted w/gofmt by default. Added comment lines to generated files. --- bootstrap/bootstrap.go | 20 +++++++++++++++++++- easyjson/main.go | 11 +++++++++-- gen/generator.go | 2 ++ 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/bootstrap/bootstrap.go b/bootstrap/bootstrap.go index 82e3e46..feeeb08 100644 --- a/bootstrap/bootstrap.go +++ b/bootstrap/bootstrap.go @@ -29,6 +29,7 @@ type Generator struct { StubsOnly bool LeaveTemps bool + NoFormat bool } // writeStub outputs an initial stubs for marshalers/unmarshalers so that the package @@ -44,7 +45,9 @@ func (g *Generator) writeStub() error { fmt.Fprintln(f, "// +build ", g.BuildTags) fmt.Fprintln(f) } - + fmt.Fprintln(f, "// TEMPORARY AUTOGENERATED FILE: easyjson stub code to make the package") + fmt.Fprintln(f, "// compilable during generation.") + fmt.Fprintln(f) fmt.Fprintln(f, "package ", g.PkgName) fmt.Fprintln(f) fmt.Fprintln(f, "import (") @@ -71,7 +74,11 @@ func (g *Generator) writeMain() (path string, err error) { return "", err } + fmt.Fprintln(f, "// TEMPORARY AUTOGENERATED FILE: easyjson bootstapping code to launch") + fmt.Fprintln(f, "// the actual generator.") + fmt.Fprintln(f) fmt.Fprintln(f, "package main") + fmt.Fprintln(f) fmt.Fprintln(f, "import (") fmt.Fprintln(f, ` "fmt"`) fmt.Fprintln(f, ` "os"`) @@ -131,6 +138,7 @@ func (g *Generator) Run() error { if err != nil { return err } + defer f.Close() if !g.LeaveTemps { defer os.Remove(f.Name()) // will not remove after rename } @@ -142,5 +150,15 @@ func (g *Generator) Run() error { return err } + if !g.NoFormat { + cmd = exec.Command("gofmt", "-w", f.Name()) + cmd.Stderr = os.Stderr + cmd.Stdout = os.Stdout + + if err = cmd.Run(); err != nil { + return err + } + } + return os.Rename(f.Name(), g.OutName) } diff --git a/easyjson/main.go b/easyjson/main.go index eace333..30e8835 100644 --- a/easyjson/main.go +++ b/easyjson/main.go @@ -17,6 +17,7 @@ var omitEmpty = flag.Bool("omit_empty", false, "omit empty fields by default") var allStructs = flag.Bool("all", false, "generate un-/marshallers for all structs in a file") var leaveTemps = flag.Bool("leave_temps", false, "do not delete temporary files") var stubs = flag.Bool("stubs", false, "only generate stubs for marshallers/unmarshallers methods") +var noformat = flag.Bool("noformat", false, "do not run 'gofmt -w' on output file") func generate(fname string) (err error) { p := parser.Parser{AllStructs: *allStructs} @@ -42,6 +43,7 @@ func generate(fname string) (err error) { LeaveTemps: *leaveTemps, OutName: outName, StubsOnly: *stubs, + NoFormat: *noformat, } if err := g.Run(); err != nil { @@ -54,8 +56,13 @@ func main() { flag.Parse() files := flag.Args() - if len(files) == 0 { - files = []string{os.Getenv("GOFILE")} + + gofile := os.Getenv("GOFILE") + if len(files) == 0 && gofile != "" { + files = []string{gofile} + } else if len(files) == 0 { + flag.Usage() + os.Exit(1) } for _, fname := range files { diff --git a/gen/generator.go b/gen/generator.go index 259014d..6e32cfa 100644 --- a/gen/generator.go +++ b/gen/generator.go @@ -122,6 +122,8 @@ func (g *Generator) printHeader() { fmt.Println("// +build ", g.buildTags) fmt.Println() } + fmt.Println("// AUTOGENERATED FILE: easyjson marshaller/unmarshallers.") + fmt.Println() fmt.Println("package ", g.pkgName) fmt.Println()