import "go/ast"

astパッケージは、Goパッケージの構文木で使う型を宣言しています。

パッケージファイル

ast.go filter.go print.go scope.go walk.go

定数

基本型のIDのリストです。

const (
    Bool = iota
    Byte
    Uint
    Int
    Float
    Complex
    Uintptr
    String

    Uint8
    Uint16
    Uint32
    Uint64

    Int8
    Int16
    Int32
    Int64

    Float32
    Float64

    Complex64
    Complex128
)

変数

var BasicTypes = map[uint]string{
    Bool:    "bool",
    Byte:    "byte",
    Uint:    "uint",
    Int:     "int",
    Float:   "float",
    Complex: "complex",
    Uintptr: "uintptr",
    String:  "string",

    Uint8:  "uint8",
    Uint16: "uint16",
    Uint32: "uint32",
    Uint64: "uint64",

    Int8:  "int8",
    Int16: "int16",
    Int32: "int32",
    Int64: "int64",

    Float32: "float32",
    Float64: "float64",

    Complex64:  "complex64",
    Complex128: "complex128",
}

FileExports関数

func FileExports(src *File) bool

FileExportsは、GoソースファイルのAST内に、エクスポートされているノードだけが残るように、ASTを再構成します。トップレベルのエクスポートされていない識別子と、それに付随する情報(型、初期値、関数の本体など)を削除します。エクスポートされている型が持つ、エクスポートされていないフィールドおよびメソッドは取り除かれます。また、エクスポートされている関数の本体にはnilがセットされます。ただしFile.commentsリストは変更されません。

FileExportsは、エクスポートされている宣言が存在したときにtrueを返します。存在しなければfalseを返します。

FilterFile関数

func FilterFile(src *File, f Filter) bool

FilterFileは、GoファイルのASTの中で、トップレベルで宣言されている名前(ただし、パラメータリストや内部の型以外)をすべてフィ ルタfに通し、そのフィルタを通過しなかった名前をすべて削除して、ASTを再構成します。処理した結果、空になった宣言はASTから取り除かれます。File.commentsリストは変更されません。

FilterFileは、フィルタリング後にトップレベルの宣言が残っていたときにtrueを返します。残っていなければfalseを返します。

FilterPackage関数

func FilterPackage(pkg *Package, f Filter) bool

FilterPackageは、GoパッケージのASTの中で、トップレベルで宣言されている名前(ただし、パラメータリストや内部の型以外)をす べてフィルタfに通し、そのフィルタを通過しなかった名前をすべて削除して、ASTを再構成します。処理した結果、空になった宣言はASTから取り除かれます。pkg.Filesリストは変更されないため、ファイル名およびトップレベルのパッケージコメントが失われることはありません。

FilterPackageは、フィルタリング後にトップレベルの宣言が残っていたときにtrueを返します。残っていなければfalseを返します。

Fprint関数

func Fprint(w io.Writer, x interface{}, f FieldFilter) (n int, err os.Error)

Fprintは、ASTノードxから始まる(サブ)ツリーを、wに出力します。

fのFieldFilterがnilでないときは、出力制御に使われます。f(fieldname, fieldvalue)が真となる構造体フィールドが出力され、それ以外は出力から除外されます。

Inspect関数

func Inspect(ast interface{}, f func(node interface{}) bool)http://golang.org/pkg/go/ast/#Inspect

Inspectは、ネストの浅い順にASTを横断します。(If node != nil, it invokes f(node)) fがtrueを返すとき、Inspectはノードのすべての非nilである子に対し、再帰的にfを実行します。

IsExported関数

func IsExported(name string) bool

IsExportedは、Goのシンボルがエクスポートされているか(すなわち、大文字で名前が始まっているか)を返します。

NotNilFilter関数

func NotNilFilter(_ string, value reflect.Value) bool

NotNilFilterは、フィールド値が非nilのときtrueを返します。nilのときは、falseを返します。

PackageExports関数

func PackageExports(pkg *Package) bool

PackageExportsは、GoパッケージのAST内に、エクスポートされているノードだけが残るように、ASTを再構成します。pkg.Filesリストは変更されないため、ファイル名およびトップレベルのパッケージコメントが失われることはありません。

PackageExportsは、エクスポートされている宣言が存在したときにtrueを返します。存在しなければfalseを返します。

Print関数

func Print(x interface{}) (int, os.Error)

Printは、nilフィールドをスキップしつつ、xを標準出力に出力します。Print(x)は、Fprint(os.Stdout, x, NotNilFilter)と同じです。

Walk関数

func Walk(v Visitor, node interface{})

Walkは、ネストの浅い順にAST内を横断して、node != nilのときに、v.Visit(node)を実行します。Walkは、呼び出したv.Visit(node)から返されたVisitor wがnilでないときは、そのwを使ってノードの子供達をvisitし、最後にw.Visit(nil)を呼び出します。

Walkは、定義されているすべてのASTノード型で呼び出し可能です。次の型、[]*Field、 []*Ident、 []Expr、 []Stmt、 []Decも引数として受け付けます。これらのスライス要素が子ノードです。

ArrayType型

ArrayTypeノードは、配列またはスライス型を表します。

type ArrayType struct {
    Lbrack token.Pos // "["の位置
    Len    Expr      // 配列型のEllipsisノード([...]T)で、スライス型のときはnil
    Elt    Expr      // 要素型
}

(*ArrayType) Pos関数

func (x *ArrayType) Pos() token.Pos

AssignStmt型

AssignStmtノードは、代入または省略形式の変数宣言を表します。

type AssignStmt struct {
    Lhs    []Expr
    TokPos token.Pos   // Tokの位置
    Tok    token.Token // 代入演算子トークン, DEFINE
    Rhs    []Expr
}

(*AssignStmt) Pos関数

func (s *AssignStmt) Pos() token.Pos

BadDecl型

BadDeclノードは、構文エラーのため、本来の宣言ノード(Decl)を作成することができなかった宣言用のプレースホールダです。

type BadDecl struct {
    Begin token.Pos // 誤りのあった宣言の開始位置
}

(*BadDecl) Pos関数

func (d *BadDecl) Pos() token.Pos

Posは、宣言ノードの実装です。

BadExpr型

BadExprノードは、構文エラーのため、本来の式ノード(Expr)を作成することができなかった式用のプレースホールダです。

type BadExpr struct {
    Begin token.Pos // 誤りのあったステートメントの開始位置
}

(*BadExpr) Pos関数

func (x *BadExpr) Pos() token.Pos

Pos()は、式/型ノードの実装です。

BadStmt型

BadStmtノードは、構文エラーのため、本来のステートメントノード(Stmt)を作成することができなかったステートメント用のプレースホールダです。

type BadStmt struct {
    Begin token.Pos // 誤りのあったステートメントの開始位置
}

(*BadStmt) Pos関数

func (s *BadStmt) Pos() token.Pos

Pos()は、ステートメントノードの実装です。

BasicLit型

BasicLitノードは、基本型リテラルを表します。

type BasicLit struct {
    ValuePos token.Pos   // リテラルの位置
    Kind     token.Token // 次のいずれか:token.INT, token.FLOAT, token.IMAG, token.CHAR, token.STRING
    Value    []byte      // リテラル文字列。例:42, 0x7f, 3.14, 1e-9, 'a', '\x7f', "foo", `\m\n\o`
}

(*BasicLit) Pos関数

func (x *BasicLit) Pos() token.Pos

BinaryExpr型

BinaryExprノードは、二項式を表します。

type BinaryExpr struct {
    X     Expr        // 左オペランド
    OpPos token.Pos   // Opの位置
    Op    token.Token // 演算子
    Y     Expr        // 右オペランド
}

(*BinaryExpr) Pos関数

func (x *BinaryExpr) Pos() token.Pos

BlockStmt型

BlockStmtノードは、波括弧で囲まれたステートメントリストを表します。

type BlockStmt struct {
    Lbrace token.Pos // "{"の位置
    List   []Stmt
    Rbrace token.Pos // "}"の位置
}

(*BlockStmt) Pos関数

func (s *BlockStmt) Pos() token.Pos

BranchStmt型

BranchStmtノードは、break、continue、goto、fallthroughステートメントを表します。

type BranchStmt struct {
    TokPos token.Pos   // Tokの位置
    Tok    token.Token // キーワードトークン(BREAK, CONTINUE, GOTO, FALLTHROUGH)
    Label  *Ident
}

(*BranchStmt) Pos関数

func (s *BranchStmt) Pos() token.Pos

CallExpr型

CallExprノードは、後ろに引数リストを伴う式を表します。

type CallExpr struct {
    Fun      Expr      // 関数式
    Lparen   token.Pos // "("の位置
    Args     []Expr    // 関数の引数
    Ellipsis token.Pos // "..."があるとき、その位置
    Rparen   token.Pos // ")"の位置
}

(*CallExpr) Pos関数

func (x *CallExpr) Pos() token.Pos

CaseClause型

CaseClauseは、式switchステートメントのcaseを表します。

type CaseClause struct {
    Case   token.Pos // "case"または"default"キーワードの位置
    Values []Expr    // nilはdefaultケースを表す
    Colon  token.Pos // ":"の位置
    Body   []Stmt    // ステートメントリスト、またはnil
}

(*CaseClause) Pos関数

func (s *CaseClause) Pos() token.Pos

ChanDir型

下の定数のいずれかで示される、チャネル型の方向です。

type ChanDir int
const (
    SEND ChanDir = 1 << iota
    RECV
)

ChanType型

ChanTypeノードは、チャネル型を表します。

type ChanType struct {
    Begin token.Pos // "chan"キーワード、または"<-"の最初に現れた方の位置
    Dir   ChanDir   // チャネルの方向
    Value Expr      // 値の型
}

(*ChanType) Pos関数

func (x *ChanType) Pos() token.Pos

CommClause型

CommClauseノードは、selectステートメントのcaseを表します。

type CommClause struct {
    Case     token.Pos   // "case"または"default"キーワードの位置
    Tok      token.Token // ASSIGNまたはDEFINE (Lhs != nilのときのみ有効)
    Lhs, Rhs Expr        // Rhs == nilのときは、defaultケースを表す
    Colon    token.Pos   // ":"の位置
    Body     []Stmt      // ステートメントリスト、またはnil
}

(*CommClause) Pos関数

func (s *CommClause) Pos() token.Pos

Comment型

Commentノードは、一行//スタイル、または/*スタイルのコメントを表します。

type Comment struct {
    Slash token.Pos // コメントの開始"/"の位置
    Text  []byte    // コメントのテキスト(//スタイルコメントの'\n'は含まない)
}

(*Comment) Pos関数

func (c *Comment) Pos() token.Pos

CommentGroup型

CommentGroupは、コメント以外のトークン、および空行を含まない一連のコメントを表します。

type CommentGroup struct {
    List []*Comment
}

CompositeLit型

CompositeLitノードは、複合リテラルを表します。

type CompositeLit struct {
    Type   Expr      // リテラルの型、またはnil
    Lbrace token.Pos // "{"の位置
    Elts   []Expr    // 複合要素のリスト
    Rbrace token.Pos // "}"の位置
}

(*CompositeLit) Pos関数

func (x *CompositeLit) Pos() token.Pos

Decl型

すべての宣言ノードは、このDeclインタフェースを実装しています。

type Decl interface {
    Node
    // contains unexported methods
}

DeclStmt型

DeclStmtノードは、ステートメントリスト内の宣言を表します。

type DeclStmt struct {
    Decl Decl
}

(*DeclStmt) Pos関数

func (s *DeclStmt) Pos() token.Pos

DeferStmt型

DeferStmtノードは、deferステートメントを表します。

type DeferStmt struct {
    Defer token.Pos // "defer"キーワードの位置
    Call  *CallExpr
}

(*DeferStmt) Pos関数

func (s *DeferStmt) Pos() token.Pos

Ellipsis型

Ellipsisノードは、パラメータリスト内の”…”型、または配列型の長さの”…”を表します。

type Ellipsis struct {
    Ellipsis token.Pos // "..."の位置
    Elt      Expr      // 要素の型(パラメータリストのときのみ)
}

(*Ellipsis) Pos関数

func (x *Ellipsis) Pos() token.Pos

EmptyStmt型

EmptyStmtノードは、空ステートメントを表します。空ステートメントの「位置」は、直前のセミコロンの位置を示しています。

type EmptyStmt struct {
    Semicolon token.Pos // 直前の";"の位置
}

(*EmptyStmt) Pos関数

func (s *EmptyStmt) Pos() token.Pos

Expr型

すべての式ノードは、このExprインタフェースを実装しています。

type Expr interface {
    Node
    // contains unexported methods
}

ExprStmt型

ExprStmtは、ステートメントリスト内の(単独の)式を表します。

type ExprStmt struct {
    X Expr // expression
}

(*ExprStmt) Pos関数

func (s *ExprStmt) Pos() token.Pos

Field型

Fieldは、構造体型のフィールド宣言のリスト、インタフェース型のメソッドのリスト、シグネチャ内のパラメータ/戻り値の宣言を表します。

type Field struct {
    Doc     *CommentGroup // 関連するドキュメント、またはnil
    Names   []*Ident      // フィールド/メソッド/パラメータの名前、匿名フィールドのときはnil
    Type    Expr          // フィールド/メソッド/パラメータの型
    Tag     *BasicLit     // フィールドタグ、またはnil
    Comment *CommentGroup // 行コメント、またはnil
}

(*Field) Pos関数

func (f *Field) Pos() token.Pos

FieldFilter型

FieldFilterは、出力を制御するためにFprintに与えることができます。

type FieldFilter func(name string, value reflect.Value) bool

FieldList型

FieldListは、丸括弧または波括弧で囲まれたフィールドのリストを表します。

type FieldList struct {
    Opening token.Pos // 開く丸括弧/波括弧の位置
    List    []*Field  // フィールドリスト
    Closing token.Pos // 閉じる丸括弧/波括弧の位置
}

(*FieldList) NumFields関数

func (f *FieldList) NumFields() int

NumFieldsは、FieldList内のフィールド数(匿名フィールドも含む)を返します。

File型

Fileノードは、Goソースファイルを表します。

Commentsは、ソースファイルのすべてのコメントを出現順に格納したリストで、このコメントは他のノードのDocやCommentフイールドからポインタで参照されます。

type File struct {
    Doc      *CommentGroup   // 関連するドキュメント、またはnil
    Package  token.Pos       // "package"キーワードの位置
    Name     *Ident          // パッケージ名
    Decls    []Decl          // トップレベルの宣言
    Comments []*CommentGroup // ソースファイル内のすべてのコメントのリスト
}

MergePackageFiles関数

func MergePackageFiles(pkg *Package, mode MergeMode) *File

MergePackageFilesは、パッケージに所属しているファイルのASTをマージして、ファイルASTを作成します。modeフラグでマージの動作を制御します。

(*File) Pos関数

func (f *File) Pos() token.Pos

Filter型

type Filter func(string) bool

ForStmt型

ForStmtは、forステートメントを表します。

type ForStmt struct {
    For  token.Pos // "for"キーワードの位置
    Init Stmt
    Cond Expr
    Post Stmt
    Body *BlockStmt
}

(*ForStmt) Pos関数

func (s *ForStmt) Pos() token.Pos

Form型

Formは、型の形式を表現します。

type Form int

型の形式の一覧です。

const (
    BadType    Form = iota // エラーハンドリング用
    Unresolved             // セットアップが終わっていない型
    Basic
    Array
    Struct
    Pointer
    Function
    Method
    Interface
    Slice
    Map
    Channel
    Tuple
)

(Form) String関数

func (form Form) String() string

FuncDecl型

FuncDeclノードは、関数宣言を表します。

type FuncDecl struct {
    Doc  *CommentGroup // 関連するドキュメント、またはnil
    Recv *FieldList    // レシーバ(メソッドのとき)、またはnil(関数のとき)
    Name *Ident        // 関数/メソッド名
    Type *FuncType     // Funcキーワードの位置、パラメータと戻り値
    Body *BlockStmt    // 関数本体、またはnil(フォワード宣言のとき)
}

(*FuncDecl) Pos関数

func (d *FuncDecl) Pos() token.Pos

FuncLit型

FuncLitノードは、関数リテラルを表します。

type FuncLit struct {
    Type *FuncType  // 関数の型
    Body *BlockStmt // 関数の本体
}

(*FuncLit) Pos関数

func (x *FuncLit) Pos() token.Pos

FuncType型

FuncTypeノードは、関数型を表します。

type FuncType struct {
    Func    token.Pos  // "func"キーワードの位置
    Params  *FieldList // (入力)パラメータ
    Results *FieldList // (出力)戻り値
}

(*FuncType) Pos関数

func (x *FuncType) Pos() token.Pos

GenDecl型

GenDeclノード(一般的な宣言ノード)は、インポート、定数、型、変数の宣言を表します。Lparenの位置の値が有効(Lparen.Line > 0)であるときは、丸括弧で囲まれている宣言であることを表します。

Tokの値と、Spec要素型の関係を下に示します:

token.IMPORT  *ImportSpec
token.CONST   *ValueSpec
token.TYPE    *TypeSpec
token.VAR     *ValueSpec
type GenDecl struct {
    Doc    *CommentGroup // 関連するドキュメント、またはnil
    TokPos token.Pos     // Tokの位置
    Tok    token.Token   // IMPORT, CONST, TYPE, VAR
    Lparen token.Pos     // '('の位置(使われていれば)
    Specs  []Spec
    Rparen token.Pos // ')'の位置(使われていれば)
}

(*GenDecl) Pos関数

func (d *GenDecl) Pos() token.Pos

GoStmt型

GoStmtノードは、Goのステートメントを表します。

type GoStmt struct {
    Go   token.Pos // "go"キーワードの位置
    Call *CallExpr
}

(*GoStmt) Pos関数

func (s *GoStmt) Pos() token.Pos

Ident型

Identノードは、識別子を表します。

type Ident struct {
    NamePos token.Pos // 識別子の位置
    Name    string    // 識別子の名前
    Obj     *Object   // 示されたオブジェクト
}

NewIdent関数

func NewIdent(name string) *Ident

NewIdentは、位置情報を持たない新しいIdentを作成します。この関数は、Goパーサーではなく、コードによって生成したASTで使用されます。

(*Ident) IsExported関数

func (id *Ident) IsExported() bool

IsExportedは、idがエクスポートされたGoのシンボルであるか(すなわち、大文字で名前が始まっているか)を返します。

(*Ident) Pos関数

func (x *Ident) Pos() token.Pos

(*Ident) String関数

func (id *Ident) String() string

IfStmt型

IfStmtノードは、ifステートメントを表します。

type IfStmt struct {
    If   token.Pos // "if"キーワードの位置
    Init Stmt
    Cond Expr
    Body *BlockStmt
    Else Stmt
}

(*IfStmt) Pos関数

func (s *IfStmt) Pos() token.Pos

ImportSpec型

ImportSpecノードは、パッケージのインポートを表します。

type ImportSpec struct {
    Doc     *CommentGroup // 関連するドキュメント、またはnil
    Name    *Ident        // ローカルパッケージ名(含む".")、またはnil
    Path    *BasicLit     // パッケージパス
    Comment *CommentGroup // 行コメント、またはnil
}

(*ImportSpec) Pos関数

func (s *ImportSpec) Pos() token.Pos

Pos() は、specノードの実装です。

IncDecStmt型

IncDecStmtノードは、インクリメントまたはデクリメントステートメントを表します。

type IncDecStmt struct {
    X   Expr
    Tok token.Token // INC または DEC
}

(*IncDecStmt) Pos関数

func (s *IncDecStmt) Pos() token.Pos

IndexExpr型

IndexExprノードは、インデックスを伴う式を表します。

type IndexExpr struct {
    X     Expr // 式
    Index Expr // インデックス式
}

(*IndexExpr) Pos関数

func (x *IndexExpr) Pos() token.Pos

InterfaceType型

InterfaceTypeノードは、インタフェース型を表します。

type InterfaceType struct {
    Interface  token.Pos  // "interface"キーワードの位置
    Methods    *FieldList // メソッドのリスト
    Incomplete bool       // メソッドリスト内に、(source)メソッドが欠落しているときtrue
}

(*InterfaceType) Pos関数

func (x *InterfaceType) Pos() token.Pos

KeyValueExpr型

KeyValueExprノードは、複合リテラル内の(キー:値)ペアを表します。

type KeyValueExpr struct {
    Key   Expr
    Colon token.Pos // ":"の位置
    Value Expr
}

(*KeyValueExpr) Pos関数

func (x *KeyValueExpr) Pos() token.Pos

Kind型

Kindは、Objectが示しているものを表現します。

type Kind int

オブジェクトの種類のリストです。

const (
    Bad Kind = iota // エラーハンドリング用
    Pkg             // パッケージ
    Con             // 定数
    Typ             // 型
    Var             // 変数
    Fun             // 関数またはメソッド
)

(Kind) String関数

func (kind Kind) String() string

LabeledStmt型

LabeledStmtノードは、ラベルが付きのステートメントを表します。

type LabeledStmt struct {
    Label *Ident
    Stmt  Stmt
}

(*LabeledStmt) Pos関数

func (s *LabeledStmt) Pos() token.Pos

MapType型

MapTypeノードは、マップ型を表します。

type MapType struct {
    Map   token.Pos // "map"キーワードの位置
    Key   Expr
    Value Expr
}

(*MapType) Pos関数

func (x *MapType) Pos() token.Pos

MergeMode型

MergeModeフラグは、MergePackageFilesの動作を制御します。

type MergeMode uint
const (
    // セットしたとき、重複した関数宣言は除外します。
    FilterFuncDuplicates MergeMode = 1 << iota
    // セットしたとき、特定のASTノードと関連(DocまたはCommentとして)
    // しないコメントは除外されます。
    FilterUnassociatedComments
)

Node型

すべてのノード型は、このNodeインタフェースを実装しています。

type Node interface {
    // Posは、ノードの(開始)位置を返します。
    Pos() token.Pos
}

Object型

Objectは、パッケージ、定数、型、変数、関数(メソッドを含む)といった言語エンティティを表します。

type Object struct {
    Kind Kind
    Name string // 宣言名
    Type *Type
    Decl interface{} // 対応するフィールド、XxxSpecまたはFuncDecl
    N    int         // この宣言のitoaの値
}

NewObj関数

func NewObj(kind Kind, name string) *Object

NewObjは、指定した種類と名前のオブジェクトを作成します。

(*Object) IsExported関数

func (obj *Object) IsExported() bool

IsExportedは、objがエクスポートされているかを返します。

Package型

Packageノードは、Goパッケージを構成するソースファイル群を表します。

type Package struct {
    Name  string           // パッケージ名
    Scope *Scope           // パッケージスコープ、またはnil
    Files map[string]*File //ファイル名をキーとした、Goソースファイルのマップ
}

ParenExpr型

ParenExprノードは、丸括弧で囲まれた式を表します。

type ParenExpr struct {
    Lparen token.Pos // "("の位置
    X      Expr      // 丸括弧で囲まれた式
    Rparen token.Pos // ")"の位置
}

(*ParenExpr) Pos関数

func (x *ParenExpr) Pos() token.Pos

RangeStmt型

RangeStmtは、rangeを伴うステートメントを表します。

type RangeStmt struct {
    For        token.Pos   // "for"キーワードの位置
    Key, Value Expr        // Valueは、nil可
    TokPos     token.Pos   // Tokの位置
    Tok        token.Token // ASSIGN, DEFINE
    X          Expr        // rangeにかける値
    Body       *BlockStmt
}

(*RangeStmt) Pos関数

func (s *RangeStmt) Pos() token.Pos

ReturnStmt型

ReturnStmtノードは、returnステートメントを表します。

type ReturnStmt struct {
    Return  token.Pos // "return"キーワードの位置
    Results []Expr
}

(*ReturnStmt) Pos関数

func (s *ReturnStmt) Pos() token.Pos

Scope型

A Scope maintains the set of named language entities declared in the scope and a link to the immediately surrounding (outer) scope.
Scopeは、スコープ内で宣言された、名前付きの言語エンティティのセットを管理し、すぐ周り(外側)のスコープにリンクします。

type Scope struct {
    Outer   *Scope
    Objects []*Object // 宣言順
    // Implementation note: In some cases (struct fields,
    // function parameters) we need the source order of
    // variables. Thus for now, we store scope entries
    // in a linear list. If scopes become very large
    // (say, for packages), we may need to change this
    // to avoid slow lookups.
}

NewScope関数

func NewScope(outer *Scope) *Scope

NewScopeは、outerスコープ内にネストする新しいスコープを作成します。

(*Scope) Insert関数

func (s *Scope) Insert(obj *Object) *Object

Insertは、 スコープsへ名前付きオブジェクトの挿入を試みます。その名前がまだ、スコープ内に含まれていないか、オブジェクトが「_」となづけられていれば、Insertは、オブジェクトを挿入して、そのオブジェクトを返します。そうでなければ、変更は行わず、代わりにスコープ内で見つけたオブジェクトを返します。

(*Scope) Lookup関数

func (s *Scope) Lookup(name string) *Object

Lookupは、スコープs内で指定した名前のオブジェクトが見つかれば、それを返します。見つからなければnilを返します。スコープ外は無視します。

Lookupは、nameが「_」のときは、その名前のオブジェクトがたとえスコープ内に存在していてもnilを返します。

SelectStmt型

SelectStmtノードは、selectステートメントを表します。

type SelectStmt struct {
    Select token.Pos  // "select"キーワードの位置
    Body   *BlockStmt // CommClausesのみ
}

(*SelectStmt) Pos関数

func (s *SelectStmt) Pos() token.Pos

SelectorExpr型

SelectorExprノードは、セレクタを伴う式を表します。

type SelectorExpr struct {
    X   Expr   // 式
    Sel *Ident // フィールドセレクタ
}

(*SelectorExpr) Pos関数

func (x *SelectorExpr) Pos() token.Pos

SliceExpr型

SliceExprノードは、スライスのインデックスを伴う式を表します。

type SliceExpr struct {
    X     Expr // 式
    Index Expr // スライスの範囲の開始、またはnil
    End   Expr // スライスの範囲の終了、またはnil
}

(*SliceExpr) Pos関数

func (x *SliceExpr) Pos() token.Pos

Spec型

Spec型は、ImportSpec、*ValueSpec、*TypeSpecのいずれかを表します。

type Spec interface {
    Node
    // contains unexported methods
}

StarExpr型

StarExprノードは、「*式」形式の式を表します。「*式」は単項式もしくはポインタ型です。

type StarExpr struct {
    Star token.Pos // "*"の位置
    X    Expr      // オペランド
}

(*StarExpr) Pos関数

func (x *StarExpr) Pos() token.Pos

Stmt型

すべてのステートメントノードは、このStmtインタフェースを実装しています。

type Stmt interface {
    Node
    // contains unexported methods
}

StructType型

StructTypeノードは、構造体型を表します。

type StructType struct {
    Struct     token.Pos  // "struct"キーワードの位置
    Fields     *FieldList // フィールド宣言のリスト
    Incomplete bool       // フィールドリスト内に、(source)フィールドが欠落しているときtrue
}

(*StructType) Pos関数

func (x *StructType) Pos() token.Pos

SwitchStmt型

SwitchStmtノードは、式switchステートメントを表します。

type SwitchStmt struct {
    Switch token.Pos // "switch"キーワードの位置
    Init   Stmt
    Tag    Expr
    Body   *BlockStmt // CaseClausesのみ
}

(*SwitchStmt) Pos関数

func (s *SwitchStmt) Pos() token.Pos

Type型

Typeは、Goの型を表します。

type Type struct {
    Form     Form
    Obj      *Object // 対応する型の名前、またはnil
    Scope    *Scope  // フィールドとメソッド。常に在る
    N        uint    // 基本型のid、配列の長さ、関数の戻り値の数、チャネルの方向のいずれか
    Key, Elt *Type   // マップのキーおよび、配列、ポインタ、スライス、マップ、チャネルの要素のいずれか
    Params   *Scope  // 関数(レシーバ、入力、結果) パラメータ、タプル式 (関数の呼び出し結果)、nilのいずれか
    Expr     Expr    // 対応するAST式
}

NewType関数

func NewType(form Form) *Type

NewTypeは、指定した形式の新しいTypeを作成します。

TypeAssertExpr型

TypeAssertExprノードは、型アサーションを伴う式を表します。

type TypeAssertExpr struct {
    X    Expr // 式
    Type Expr // アサーションする型、nilのときは型switch X.(type)を表す
}

(*TypeAssertExpr) Pos関数

func (x *TypeAssertExpr) Pos() token.Pos

TypeCaseClause型

TypeCaseClauseは、型switchステートメントのcaseを表します。

type TypeCaseClause struct {
    Case  token.Pos // "case"または"default"キーワードの位置
    Types []Expr    // nilは、defaultケースを表す
    Colon token.Pos // ":"の位置
    Body  []Stmt    // ステートメントリスト、またはnil
}

(*TypeCaseClause) Pos関数

func (s *TypeCaseClause) Pos() token.Pos

TypeSpec型

TypeSpecノードは、型宣言を表します。

type TypeSpec struct {
    Doc     *CommentGroup // 関連するドキュメント、またはnil
    Name    *Ident        // 型名
    Type    Expr          // *Ident, *ParenExpr, *SelectorExpr, *StarExpr, *XxxTypesのいずれか
    Comment *CommentGroup // 行コメント、またはnil
}

(*TypeSpec) Pos関数

func (s *TypeSpec) Pos() token.Pos

TypeSwitchStmt型

TypeSwitchStmtノードは、型switchステートメントを表します。

type TypeSwitchStmt struct {
    Switch token.Pos // "switch"キーワードの位置
    Init   Stmt
    Assign Stmt       // x := y.(type)
    Body   *BlockStmt // TypeCaseClausesのみ
}

(*TypeSwitchStmt) Pos関数

func (s *TypeSwitchStmt) Pos() token.Pos

UnaryExpr型

UnaryExprノードは、単項式を表します。ただし単項式”*”は、StarExprで表されます。

type UnaryExpr struct {
    OpPos token.Pos   // Opの位置
    Op    token.Token // 演算子
    X     Expr        // オペランド
}

(*UnaryExpr) Pos関数

func (x *UnaryExpr) Pos() token.Pos

ValueSpec型

ValueSpecノードは、定数または変数宣言を表します。

type ValueSpec struct {
    Doc     *CommentGroup // 関連するドキュメント、またはnil
    Names   []*Ident      // 値の名前
    Type    Expr          // 値の型、またはnil
    Values  []Expr        // 初期値、またはnil
    Comment *CommentGroup // 行コメント、またはnil
}

(*ValueSpec) Pos関数

func (s *ValueSpec) Pos() token.Pos

Visitor型

VisitorのVisitメソッドは、Walk関数で抽出された各ノードを使って呼び出されます。Walkは、呼び出したv.Visit(node)から返されたVisitor wがnilでないときは、そのwを使ってノードの子供達をvisitし、最後にw.Visit(nil)を呼び出します。

type Visitor interface {
    Visit(node interface{}) (w Visitor)
}
(入力)パラメータ