// format parses src, prints the corresponding AST, verifies the resulting // src is syntactically correct, and returns the resulting src or an error // if any. func format(f *File) ([]byte, error) { var buf bytes.Buffer if err := printer.Fprint(&buf, f.HCL()); err != nil { return nil, fmt.Errorf("print: %s", err) } // make sure formatted output is syntactically correct res := buf.Bytes() /* if _, err := Parse(bytes.NewReader(res)); err != nil { return nil, fmt.Errorf("parse: %s\n%s", err, f.Path) } */ return res, nil }
func hclPrint(node ast.Node) ([]byte, error) { var sanitizer astSanitizer sanitizer.visit(node) var b bytes.Buffer err := hcl_printer.Fprint(&b, node) if err != nil { return nil, fmt.Errorf("error writing HCL: %v", err) } s := b.String() // Remove extra whitespace... s = strings.Replace(s, "\n\n", "\n", -1) // ...but leave whitespace between resources s = strings.Replace(s, "}\nresource", "}\n\nresource", -1) // Workaround HCL insanity #6359: quotes are _not_ escaped in quotes (huh?) // This hits the file function s = strings.Replace(s, "(\\\"", "(\"", -1) s = strings.Replace(s, "\\\")", "\")", -1) return []byte(s), nil }