Closes #3: Output is formatted w/gofmt by default. Added comment lines to generated files.

This commit is contained in:
Victor Starodub
2016-03-25 13:36:51 +03:00
parent 732107e356
commit 57a7965db5
3 changed files with 30 additions and 3 deletions
+19 -1
View File
@@ -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)
}
+9 -2
View File
@@ -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 {
+2
View File
@@ -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()