From 9f1cb70aac3b27fba040cd27a41e2fe633c97476 Mon Sep 17 00:00:00 2001 From: Michael McLoughlin Date: Sat, 5 Jan 2019 11:53:35 -0800 Subject: [PATCH] internal/prnt: doc exported symbols (#9) --- internal/prnt/printer.go | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/internal/prnt/printer.go b/internal/prnt/printer.go index 33a9a2d..86b4631 100644 --- a/internal/prnt/printer.go +++ b/internal/prnt/printer.go @@ -5,36 +5,47 @@ import ( "fmt" ) +// Generator provides convenience methods for code generators. In particular it +// provides fmt-like methods which print to an internal buffer. It also allows +// any errors to be stored so they can be checked at the end, rather than having +// error checks obscuring the code generation. type Generator struct { buf bytes.Buffer err error } +// Printf prints to the internal buffer. func (g *Generator) Printf(format string, args ...interface{}) { if g.err != nil { return } - if _, err := fmt.Fprintf(&g.buf, format, args...); err != nil { - g.AddError(err) - } + _, err := fmt.Fprintf(&g.buf, format, args...) + g.AddError(err) } +// NL prints a new line. func (g *Generator) NL() { g.Printf("\n") } +// Comment writes comment lines prefixed with "// ". func (g *Generator) Comment(lines ...string) { for _, line := range lines { g.Printf("// %s\n", line) } } +// AddError records an error in code generation. The first non-nil error will +// prevent printing operations from writing anything else, and the error will be +// returned from Result(). func (g *Generator) AddError(err error) { if err != nil && g.err == nil { g.err = err } } +// Result returns the printed bytes. If any error was recorded with AddError +// during code generation, the first such error will be returned here. func (g *Generator) Result() ([]byte, error) { return g.buf.Bytes(), g.err }