Format generated source code before writing it to the destination.
Signed-off-by: David Symonds <dsymonds@golang.org>
diff --git a/mockgen/mockgen.go b/mockgen/mockgen.go
index 6371f7d..6698b2a 100644
--- a/mockgen/mockgen.go
+++ b/mockgen/mockgen.go
@@ -19,8 +19,10 @@
// TODO: This does not support embedding package-local interfaces in a separate file.
import (
+ "bytes"
"flag"
"fmt"
+ "go/format"
"go/token"
"io"
"log"
@@ -86,9 +88,7 @@
packageName = "mock_" + sanitize(pkg.Name)
}
- g := generator{
- w: dst,
- }
+ g := new(generator)
if *source != "" {
g.filename = *source
} else {
@@ -98,6 +98,9 @@
if err := g.Generate(pkg, packageName); err != nil {
log.Fatalf("Failed generating mock: %v", err)
}
+ if _, err := dst.Write(g.Output()); err != nil {
+ log.Fatalf("Failed writing to destination: %v", err)
+ }
}
func usage() {
@@ -123,7 +126,7 @@
`
type generator struct {
- w io.Writer
+ buf bytes.Buffer
indent string
filename string // may be empty
@@ -133,7 +136,7 @@
}
func (g *generator) p(format string, args ...interface{}) {
- fmt.Fprintf(g.w, g.indent+format+"\n", args...)
+ fmt.Fprintf(&g.buf, g.indent+format+"\n", args...)
}
func (g *generator) in() {
@@ -411,3 +414,12 @@
g.p("}")
return nil
}
+
+// Output returns the generator's output, formatted in the standard Go style.
+func (g *generator) Output() []byte {
+ src, err := format.Source(g.buf.Bytes())
+ if err != nil {
+ log.Fatalf("Failed to format generated source code: %s\n%s", err, g.buf.String())
+ }
+ return src
+}