go example_test 源码

2022-07-15 浏览 (797)

golang example_test 代码

文件路径:/src/go/printer/example_test.go

/ 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.ReplaceAll(s, "\n\t", "\n"))

	/ 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.ReplaceAll(s, "\n\t", "\n"))
	/
	/ fmt.Println(s)
}

相关信息

go 源码目录

相关文章

go comment 源码

go gobuild 源码

go nodes 源码

go performance_test 源码

go printer 源码

go printer_test 源码

^