printer: rename methods to make it more readable
This commit is contained in:
parent
e947512362
commit
ad50ec5933
@ -3,7 +3,6 @@ package printer
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
|
||||||
|
|
||||||
"github.com/fatih/hcl/ast"
|
"github.com/fatih/hcl/ast"
|
||||||
)
|
)
|
||||||
@ -14,13 +13,14 @@ const (
|
|||||||
tab = byte('\t')
|
tab = byte('\t')
|
||||||
)
|
)
|
||||||
|
|
||||||
func (p *printer) printNode(n ast.Node) []byte {
|
// node
|
||||||
|
func (p *printer) output(n ast.Node) []byte {
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
|
|
||||||
switch t := n.(type) {
|
switch t := n.(type) {
|
||||||
case *ast.ObjectList:
|
case *ast.ObjectList:
|
||||||
for i, item := range t.Items {
|
for i, item := range t.Items {
|
||||||
buf.Write(p.printObjectItem(item))
|
buf.Write(p.objectItem(item))
|
||||||
if i != len(t.Items)-1 {
|
if i != len(t.Items)-1 {
|
||||||
buf.Write([]byte{newline, newline})
|
buf.Write([]byte{newline, newline})
|
||||||
}
|
}
|
||||||
@ -28,13 +28,13 @@ func (p *printer) printNode(n ast.Node) []byte {
|
|||||||
case *ast.ObjectKey:
|
case *ast.ObjectKey:
|
||||||
buf.WriteString(t.Token.Text)
|
buf.WriteString(t.Token.Text)
|
||||||
case *ast.ObjectItem:
|
case *ast.ObjectItem:
|
||||||
buf.Write(p.printObjectItem(t))
|
buf.Write(p.objectItem(t))
|
||||||
case *ast.LiteralType:
|
case *ast.LiteralType:
|
||||||
buf.WriteString(t.Token.Text)
|
buf.WriteString(t.Token.Text)
|
||||||
case *ast.ListType:
|
case *ast.ListType:
|
||||||
buf.Write(p.printList(t))
|
buf.Write(p.list(t))
|
||||||
case *ast.ObjectType:
|
case *ast.ObjectType:
|
||||||
buf.Write(p.printObjectType(t))
|
buf.Write(p.objectType(t))
|
||||||
default:
|
default:
|
||||||
fmt.Printf(" unknown type: %T\n", n)
|
fmt.Printf(" unknown type: %T\n", n)
|
||||||
}
|
}
|
||||||
@ -42,7 +42,7 @@ func (p *printer) printNode(n ast.Node) []byte {
|
|||||||
return buf.Bytes()
|
return buf.Bytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *printer) printObjectItem(o *ast.ObjectItem) []byte {
|
func (p *printer) objectItem(o *ast.ObjectItem) []byte {
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
|
|
||||||
for i, k := range o.Keys {
|
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()
|
return buf.Bytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *printer) printLiteral(l *ast.LiteralType) []byte {
|
func (p *printer) literal(l *ast.LiteralType) []byte {
|
||||||
return []byte(l.Token.Text)
|
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
|
var buf bytes.Buffer
|
||||||
buf.WriteString("{")
|
buf.WriteString("{")
|
||||||
buf.WriteByte(newline)
|
buf.WriteByte(newline)
|
||||||
|
|
||||||
for _, item := range o.List.Items {
|
for _, item := range o.List.Items {
|
||||||
buf.Write(p.indent(p.printObjectItem(item)))
|
buf.Write(p.indent(p.objectItem(item)))
|
||||||
buf.WriteByte(newline)
|
buf.WriteByte(newline)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,7 +78,8 @@ func (p *printer) printObjectType(o *ast.ObjectType) []byte {
|
|||||||
return buf.Bytes()
|
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
|
var buf bytes.Buffer
|
||||||
buf.WriteString("[")
|
buf.WriteString("[")
|
||||||
|
|
||||||
@ -88,8 +89,7 @@ func (p *printer) printList(l *ast.ListType) []byte {
|
|||||||
buf.WriteByte(newline)
|
buf.WriteByte(newline)
|
||||||
}
|
}
|
||||||
|
|
||||||
buf.WriteByte(tab)
|
buf.Write(p.indent(p.output(item)))
|
||||||
buf.Write(p.printNode(item))
|
|
||||||
|
|
||||||
if i != len(l.List)-1 {
|
if i != len(l.List)-1 {
|
||||||
buf.WriteString(",")
|
buf.WriteString(",")
|
||||||
@ -104,18 +104,15 @@ func (p *printer) printList(l *ast.ListType) []byte {
|
|||||||
return buf.Bytes()
|
return buf.Bytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
func writeBlank(buf io.ByteWriter, indent int) {
|
// indent indents the lines of the given buffer for each non-empty line
|
||||||
for i := 0; i < indent; i++ {
|
|
||||||
buf.WriteByte(blank)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *printer) indent(buf []byte) []byte {
|
func (p *printer) indent(buf []byte) []byte {
|
||||||
prefix := []byte{tab}
|
var prefix []byte
|
||||||
if p.cfg.SpaceWidth != 0 {
|
if p.cfg.SpacesWidth != 0 {
|
||||||
for i := 0; i < p.cfg.SpaceWidth; i++ {
|
for i := 0; i < p.cfg.SpacesWidth; i++ {
|
||||||
prefix = append(prefix, blank)
|
prefix = append(prefix, blank)
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
prefix = []byte{tab}
|
||||||
}
|
}
|
||||||
|
|
||||||
var res []byte
|
var res []byte
|
||||||
|
@ -8,27 +8,20 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type printer struct {
|
type printer struct {
|
||||||
out []byte // raw printer result
|
cfg Config
|
||||||
cfg Config
|
|
||||||
node ast.Node
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *printer) output() []byte {
|
|
||||||
return p.printNode(p.node)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// A Config node controls the output of Fprint.
|
// A Config node controls the output of Fprint.
|
||||||
type Config struct {
|
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{
|
p := &printer{
|
||||||
cfg: *c,
|
cfg: *c,
|
||||||
node: node,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := output.Write(p.output()); err != nil {
|
if _, err := output.Write(p.output(node)); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,10 +34,6 @@ func (c *Config) fprint(output io.Writer, node ast.Node) error {
|
|||||||
return err
|
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
|
// Fprint "pretty-prints" an HCL node to output
|
||||||
// It calls Config.Fprint with default settings.
|
// It calls Config.Fprint with default settings.
|
||||||
func Fprint(output io.Writer, node ast.Node) error {
|
func Fprint(output io.Writer, node ast.Node) error {
|
||||||
|
@ -113,7 +113,15 @@ func format(src []byte) ([]byte, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var buf bytes.Buffer
|
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)
|
return nil, fmt.Errorf("print: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user