Skip to content

Commit

Permalink
go/printer: make ExampleFprint correctly run as online example
Browse files Browse the repository at this point in the history
function "ExampleFprint" will be rewritten to function "main"
when displayed on the godoc pages, so the online example is failed to
run:

    Output:

    panic: function not found

    goroutine 1 [running]:
    main.parseFunc({0x4f772e, 0xf}, {0x4f713f, 0xd})
            /tmp/sandbox1264544227/prog.go:23 +0x13b
    main.main()
            /tmp/sandbox1264544227/prog.go:30 +0x45

See: https://pkg.go.dev/go/printer#example-Fprint

Add printSelf function to prevent the function not found when running in godoc
sandbox. Beside, deleting the dummy test function to make the example show
the entire file, as we want to show the newly added printSelf function.

Change-Id: Ia2b772937081b58a0fce9860838959c95f2d650c
GitHub-Last-Rev: bac1189
GitHub-Pull-Request: #53141
Reviewed-on: https://go-review.googlesource.com/c/go/+/409314
TryBot-Result: Gopher Robot <[email protected]>
Run-TryBot: Daniel Martí <[email protected]>
Reviewed-by: Heschi Kreinick <[email protected]>
Reviewed-by: Bryan Mills <[email protected]>
Reviewed-by: Daniel Martí <[email protected]>
  • Loading branch information
SilverRainZ authored and mvdan committed Sep 16, 2022
1 parent b35b4a3 commit 88b51d2
Showing 1 changed file with 8 additions and 8 deletions.
16 changes: 8 additions & 8 deletions src/go/printer/example_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,8 @@ import (
"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 {
Expand All @@ -31,11 +27,11 @@ func parseFunc(filename, functionname string) (fun *ast.FuncDecl, fset *token.Fi
panic("function not found")
}

func ExampleFprint() {
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", "ExampleFprint")
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
Expand All @@ -52,9 +48,13 @@ func ExampleFprint() {

// Print the cleaned-up body text to stdout.
fmt.Println(s)
}

func ExampleFprint() {
printSelf()

// output:
// funcAST, fset := parseFunc("example_test.go", "ExampleFprint")
// Output:
// funcAST, fset := parseFunc("example_test.go", "printSelf")
//
// var buf bytes.Buffer
// printer.Fprint(&buf, fset, funcAST.Body)
Expand Down

0 comments on commit 88b51d2

Please sign in to comment.