...

パッケージ printer

import "go/printer"
概要
目次

概要 ▾

printer パッケージは,AST ノードの出力を実装します。

func Fprint

func Fprint(output io.Writer, fset *token.FileSet, node interface{}) error

Fprint は AST ノードを出力するために "きれいに表示" します。 既定の設定で Config.Fprint を呼び出します。 gofmt はインデントにはタブを使用しますが,位置合わせにはスペースを使用します。 gofmt に一致する出力には format.Node (go/format パッケージ) を使用してください。

コード:

// ソースファイルを解析し,ファイルセット fset を参照する位置情報を使用して,この関数に対するコメントなしで AST を抽出します。
funcAST, fset := parseFunc("example_test.go", "ExampleFprint")

// 関数本体をバッファ buf に出力します。
// ファイルセットはプリンタに渡されるため,元のソースフォーマットが認識され,ソースのどこに改行を追加することができます。
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)

出力:

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)

type CommentedNode

CommentedNode は, AST ノードとそれに対応するコメントをまとめたものです。 それは Fprint 関数のいずれかへの引数として渡されるかもしれません。

type CommentedNode struct {
    Node     interface{} // *ast.File ,または ast.Expr, ast.Decl, ast.Spec ,または ast.Stmt
    Comments []*ast.CommentGroup
}

type Config

Config ノードは Fprint の出力を制御します。

type Config struct {
    Mode     Mode // デフォルト: 0
    Tabwidth int  // デフォルト: 8
    Indent   int  // デフォルト: 0 (すべてのコードは少なくともこれまでインデントされています); added in Go 1.1
}

func (*Config) Fprint

func (cfg *Config) Fprint(output io.Writer, fset *token.FileSet, node interface{}) error

Fprint は与えられた設定 cfg に対して出力するために AST ノードを " きれいに表示 " します。 位置情報はファイルセット fset を基準にして解釈されます。 ノード・型は, *ast.File, *CommentedNode, []ast.Decl, []ast.Stmt ,または ast.Expr, ast.Decl, ast.Spec ,または ast.Stmt と代入互換性がある必要があります。

type Mode

モード値は一連のフラグ (または 0) です。 彼らは表示を制御します。

type Mode uint
const (
    RawFormat Mode = 1 << iota // tabwriter を使わないでください。 設定した場合, UseSpaces は無視されます。
    TabIndent                  // UseSpaces から独立したインデントのためにタブを使う
    UseSpaces                  // 整列のためにタブの代わりにスペースを使う
    SourcePos                  // 元のソース位置を維持するために //line ディレクティブを発行する
)