From ad50ec59334752a8aabb680b0738263f83dc94d7 Mon Sep 17 00:00:00 2001 From: Fatih Arslan Date: Sun, 25 Oct 2015 18:10:34 +0300 Subject: [PATCH] printer: rename methods to make it more readable --- printer/nodes.go | 43 +++++++++++++++++++---------------------- printer/printer.go | 21 +++++--------------- printer/printer_test.go | 10 +++++++++- 3 files changed, 34 insertions(+), 40 deletions(-) diff --git a/printer/nodes.go b/printer/nodes.go index 1d35cfb..c05a211 100644 --- a/printer/nodes.go +++ b/printer/nodes.go @@ -3,7 +3,6 @@ package printer import ( "bytes" "fmt" - "io" "github.com/fatih/hcl/ast" ) @@ -14,13 +13,14 @@ const ( tab = byte('\t') ) -func (p *printer) printNode(n ast.Node) []byte { +// node +func (p *printer) output(n ast.Node) []byte { var buf bytes.Buffer switch t := n.(type) { case *ast.ObjectList: for i, item := range t.Items { - buf.Write(p.printObjectItem(item)) + buf.Write(p.objectItem(item)) if i != len(t.Items)-1 { buf.Write([]byte{newline, newline}) } @@ -28,13 +28,13 @@ func (p *printer) printNode(n ast.Node) []byte { case *ast.ObjectKey: buf.WriteString(t.Token.Text) case *ast.ObjectItem: - buf.Write(p.printObjectItem(t)) + buf.Write(p.objectItem(t)) case *ast.LiteralType: buf.WriteString(t.Token.Text) case *ast.ListType: - buf.Write(p.printList(t)) + buf.Write(p.list(t)) case *ast.ObjectType: - buf.Write(p.printObjectType(t)) + buf.Write(p.objectType(t)) default: fmt.Printf(" unknown type: %T\n", n) } @@ -42,7 +42,7 @@ func (p *printer) printNode(n ast.Node) []byte { return buf.Bytes() } -func (p *printer) printObjectItem(o *ast.ObjectItem) []byte { +func (p *printer) objectItem(o *ast.ObjectItem) []byte { var buf bytes.Buffer for i, k := range o.Keys { @@ -56,21 +56,21 @@ func (p *printer) printObjectItem(o *ast.ObjectItem) []byte { } } - buf.Write(p.printNode(o.Val)) + buf.Write(p.output(o.Val)) return buf.Bytes() } -func (p *printer) printLiteral(l *ast.LiteralType) []byte { +func (p *printer) literal(l *ast.LiteralType) []byte { return []byte(l.Token.Text) } -func (p *printer) printObjectType(o *ast.ObjectType) []byte { +func (p *printer) objectType(o *ast.ObjectType) []byte { var buf bytes.Buffer buf.WriteString("{") buf.WriteByte(newline) for _, item := range o.List.Items { - buf.Write(p.indent(p.printObjectItem(item))) + buf.Write(p.indent(p.objectItem(item))) buf.WriteByte(newline) } @@ -78,7 +78,8 @@ func (p *printer) printObjectType(o *ast.ObjectType) []byte { return buf.Bytes() } -func (p *printer) printList(l *ast.ListType) []byte { +// printList prints a HCL list +func (p *printer) list(l *ast.ListType) []byte { var buf bytes.Buffer buf.WriteString("[") @@ -88,8 +89,7 @@ func (p *printer) printList(l *ast.ListType) []byte { buf.WriteByte(newline) } - buf.WriteByte(tab) - buf.Write(p.printNode(item)) + buf.Write(p.indent(p.output(item))) if i != len(l.List)-1 { buf.WriteString(",") @@ -104,18 +104,15 @@ func (p *printer) printList(l *ast.ListType) []byte { return buf.Bytes() } -func writeBlank(buf io.ByteWriter, indent int) { - for i := 0; i < indent; i++ { - buf.WriteByte(blank) - } -} - +// indent indents the lines of the given buffer for each non-empty line func (p *printer) indent(buf []byte) []byte { - prefix := []byte{tab} - if p.cfg.SpaceWidth != 0 { - for i := 0; i < p.cfg.SpaceWidth; i++ { + var prefix []byte + if p.cfg.SpacesWidth != 0 { + for i := 0; i < p.cfg.SpacesWidth; i++ { prefix = append(prefix, blank) } + } else { + prefix = []byte{tab} } var res []byte diff --git a/printer/printer.go b/printer/printer.go index a8ddca5..5bedca0 100644 --- a/printer/printer.go +++ b/printer/printer.go @@ -8,27 +8,20 @@ import ( ) type printer struct { - out []byte // raw printer result - cfg Config - node ast.Node -} - -func (p *printer) output() []byte { - return p.printNode(p.node) + cfg Config } // A Config node controls the output of Fprint. type Config struct { - SpaceWidth int // if set, it will use spaces instead of tabs for alignment + SpacesWidth int // if set, it will use spaces instead of tabs for alignment } -func (c *Config) fprint(output io.Writer, node ast.Node) error { +func (c *Config) Fprint(output io.Writer, node ast.Node) error { p := &printer{ - cfg: *c, - node: node, + cfg: *c, } - if _, err := output.Write(p.output()); err != nil { + if _, err := output.Write(p.output(node)); err != nil { return err } @@ -41,10 +34,6 @@ func (c *Config) fprint(output io.Writer, node ast.Node) error { return err } -func (c *Config) Fprint(output io.Writer, node ast.Node) error { - return c.fprint(output, node) -} - // Fprint "pretty-prints" an HCL node to output // It calls Config.Fprint with default settings. func Fprint(output io.Writer, node ast.Node) error { diff --git a/printer/printer_test.go b/printer/printer_test.go index 1141e85..208d390 100644 --- a/printer/printer_test.go +++ b/printer/printer_test.go @@ -113,7 +113,15 @@ func format(src []byte) ([]byte, error) { } var buf bytes.Buffer - if err := Fprint(&buf, node); err != nil { + + // test with Spaces + // cfg := &Config{SpacesWidth: 4} + // if err := cfg.Fprint(&buf, node); err != nil { + // return nil, fmt.Errorf("print: %s", err) + // } + + cfg := &Config{} + if err := cfg.Fprint(&buf, node); err != nil { return nil, fmt.Errorf("print: %s", err) }