printer
packagestandard libraryThis package is not in the latest version of its module.
Details
Validgo.mod file
The Go module system was introduced in Go 1.11 and is the official dependency management solution for Go.
Redistributable license
Redistributable licenses place minimal restrictions on how software can be used, modified, and redistributed.
Tagged version
Modules with tagged versions give importers more predictable builds.
Stable version
When a project reaches major version v1 it is considered stable.
- Learn more about best practices
Repository
Links
Documentation¶
Overview¶
Package printer implements printing of AST nodes.
Index¶
Examples¶
Constants¶
This section is empty.
Variables¶
This section is empty.
Functions¶
funcFprint¶
Fprint "pretty-prints" an AST node to output.It callsConfig.Fprint with default settings.Note that gofmt uses tabs for indentation but spaces for alignment;use format.Node (package go/format) for output that matches gofmt.
Example¶
package mainimport ("bytes""fmt""go/ast""go/parser""go/printer""go/token""strings")func parseFunc(filename, functionname string) (fun *ast.FuncDecl, fset *token.FileSet) {fset = token.NewFileSet()if file, err := parser.ParseFile(fset, filename, nil, 0); err == nil {for _, d := range file.Decls {if f, ok := d.(*ast.FuncDecl); ok && f.Name.Name == functionname {fun = freturn}}}panic("function not found")}func printSelf() {// Parse source file and extract the AST without comments for// this function, with position information referring to the// file set fset.funcAST, fset := parseFunc("example_test.go", "printSelf")// Print the function body into buffer buf.// The file set is provided to the printer so that it knows// about the original source formatting and can add additional// line breaks where they were present in the source.var buf bytes.Bufferprinter.Fprint(&buf, fset, funcAST.Body)// Remove braces {} enclosing the function body, unindent,// and trim leading and trailing white space.s := buf.String()s = s[1 : len(s)-1]s = strings.TrimSpace(strings.ReplaceAll(s, "\n\t", "\n"))// Print the cleaned-up body text to stdout.fmt.Println(s)}func main() {printSelf()}Output:funcAST, fset := parseFunc("example_test.go", "printSelf")var buf bytes.Bufferprinter.Fprint(&buf, fset, funcAST.Body)s := buf.String()s = s[1 : len(s)-1]s = strings.TrimSpace(strings.ReplaceAll(s, "\n\t", "\n"))fmt.Println(s)
Types¶
typeCommentedNode¶
type CommentedNode struct {Nodeany// *ast.File, or ast.Expr, ast.Decl, ast.Spec, or ast.StmtComments []*ast.CommentGroup}A CommentedNode bundles an AST node and corresponding comments.It may be provided as argument to any of theFprint functions.
typeConfig¶
type Config struct {ModeMode// default: 0Tabwidthint// default: 8Indentint// default: 0 (all code is indented at least by this much)}A Config node controls the output of Fprint.
func (*Config)Fprint¶
Fprint "pretty-prints" an AST node to output for a given configuration cfg.Position information is interpreted relative to the file set fset.The node type must be *ast.File, *CommentedNode, []ast.Decl, []ast.Stmt,or assignment-compatible toast.Expr,ast.Decl,ast.Spec, orast.Stmt.