]> Cypherpunks repositories - gostls13.git/commitdiff
go/printer: example for Fprint
authorRobert Griesemer <gri@golang.org>
Fri, 9 Mar 2012 21:53:25 +0000 (13:53 -0800)
committerRobert Griesemer <gri@golang.org>
Fri, 9 Mar 2012 21:53:25 +0000 (13:53 -0800)
R=golang-dev, dsymonds, rsc
CC=golang-dev
https://golang.org/cl/5785057

src/pkg/go/printer/example_test.go [new file with mode: 0644]

diff --git a/src/pkg/go/printer/example_test.go b/src/pkg/go/printer/example_test.go
new file mode 100644 (file)
index 0000000..e570040
--- /dev/null
@@ -0,0 +1,67 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package printer_test
+
+import (
+       "bytes"
+       "fmt"
+       "go/ast"
+       "go/parser"
+       "go/printer"
+       "go/token"
+       "strings"
+       "testing"
+)
+
+// Dummy test function so that godoc does not use the entire file as example.
+func Test(*testing.T) {}
+
+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 = f
+                               return
+                       }
+               }
+       }
+       panic("function not found")
+}
+
+func ExampleFprint() {
+       // 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", "ExampleFprint")
+
+       // 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.Buffer
+       printer.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.Replace(s, "\n\t", "\n", -1))
+
+       // Print the cleaned-up body text to stdout.
+       fmt.Println(s)
+
+       // output:
+       // funcAST, fset := parseFunc("example_test.go", "ExampleFprint")
+       //
+       // var buf bytes.Buffer
+       // printer.Fprint(&buf, fset, funcAST.Body)
+       //
+       // s := buf.String()
+       // s = s[1 : len(s)-1]
+       // s = strings.TrimSpace(strings.Replace(s, "\n\t", "\n", -1))
+       //
+       // fmt.Println(s)
+}