1
0
mirror of https://github.com/schollz/cowyo.git synced 2023-08-10 21:13:00 +03:00
cowyo/vendor/github.com/shurcooL/go-goon/large_test.go

145 lines
4.1 KiB
Go
Raw Permalink Normal View History

2017-10-03 21:43:55 +03:00
package goon_test
import (
"go/ast"
"go/parser"
"go/token"
"runtime"
"github.com/shurcooL/go-goon"
)
func foo(bar int) int { return bar * 2 }
func Example_large() {
fset := token.NewFileSet()
if file, err := parser.ParseFile(fset, thisGoSourceFile(), nil, 0); nil == err {
for _, d := range file.Decls {
if f, ok := d.(*ast.FuncDecl); ok {
goon.Dump(f)
break
}
}
}
// Output:
// (*ast.FuncDecl)(&ast.FuncDecl{
// Doc: (*ast.CommentGroup)(nil),
// Recv: (*ast.FieldList)(nil),
// Name: (*ast.Ident)(&ast.Ident{
// NamePos: (token.Pos)(115),
// Name: (string)("foo"),
// Obj: (*ast.Object)(&ast.Object{
// Kind: (ast.ObjKind)(5),
// Name: (string)("foo"),
// Decl: (*ast.FuncDecl)(already_shown),
// Data: (interface{})(nil),
// Type: (interface{})(nil),
// }),
// }),
// Type: (*ast.FuncType)(&ast.FuncType{
// Func: (token.Pos)(110),
// Params: (*ast.FieldList)(&ast.FieldList{
// Opening: (token.Pos)(118),
// List: ([]*ast.Field)([]*ast.Field{
// (*ast.Field)(&ast.Field{
// Doc: (*ast.CommentGroup)(nil),
// Names: ([]*ast.Ident)([]*ast.Ident{
// (*ast.Ident)(&ast.Ident{
// NamePos: (token.Pos)(119),
// Name: (string)("bar"),
// Obj: (*ast.Object)(&ast.Object{
// Kind: (ast.ObjKind)(4),
// Name: (string)("bar"),
// Decl: (*ast.Field)(already_shown),
// Data: (interface{})(nil),
// Type: (interface{})(nil),
// }),
// }),
// }),
// Type: (*ast.Ident)(&ast.Ident{
// NamePos: (token.Pos)(123),
// Name: (string)("int"),
// Obj: (*ast.Object)(nil),
// }),
// Tag: (*ast.BasicLit)(nil),
// Comment: (*ast.CommentGroup)(nil),
// }),
// }),
// Closing: (token.Pos)(126),
// }),
// Results: (*ast.FieldList)(&ast.FieldList{
// Opening: (token.Pos)(0),
// List: ([]*ast.Field)([]*ast.Field{
// (*ast.Field)(&ast.Field{
// Doc: (*ast.CommentGroup)(nil),
// Names: ([]*ast.Ident)(nil),
// Type: (*ast.Ident)(&ast.Ident{
// NamePos: (token.Pos)(128),
// Name: (string)("int"),
// Obj: (*ast.Object)(nil),
// }),
// Tag: (*ast.BasicLit)(nil),
// Comment: (*ast.CommentGroup)(nil),
// }),
// }),
// Closing: (token.Pos)(0),
// }),
// }),
// Body: (*ast.BlockStmt)(&ast.BlockStmt{
// Lbrace: (token.Pos)(132),
// List: ([]ast.Stmt)([]ast.Stmt{
// (*ast.ReturnStmt)(&ast.ReturnStmt{
// Return: (token.Pos)(134),
// Results: ([]ast.Expr)([]ast.Expr{
// (*ast.BinaryExpr)(&ast.BinaryExpr{
// X: (*ast.Ident)(&ast.Ident{
// NamePos: (token.Pos)(141),
// Name: (string)("bar"),
// Obj: (*ast.Object)(&ast.Object{
// Kind: (ast.ObjKind)(4),
// Name: (string)("bar"),
// Decl: (*ast.Field)(&ast.Field{
// Doc: (*ast.CommentGroup)(nil),
// Names: ([]*ast.Ident)([]*ast.Ident{
// (*ast.Ident)(&ast.Ident{
// NamePos: (token.Pos)(119),
// Name: (string)("bar"),
// Obj: (*ast.Object)(already_shown),
// }),
// }),
// Type: (*ast.Ident)(&ast.Ident{
// NamePos: (token.Pos)(123),
// Name: (string)("int"),
// Obj: (*ast.Object)(nil),
// }),
// Tag: (*ast.BasicLit)(nil),
// Comment: (*ast.CommentGroup)(nil),
// }),
// Data: (interface{})(nil),
// Type: (interface{})(nil),
// }),
// }),
// OpPos: (token.Pos)(145),
// Op: (token.Token)(14),
// Y: (*ast.BasicLit)(&ast.BasicLit{
// ValuePos: (token.Pos)(147),
// Kind: (token.Token)(5),
// Value: (string)("2"),
// }),
// }),
// }),
// }),
// }),
// Rbrace: (token.Pos)(149),
// }),
// })
//
}
// thisGoSourceFile returns the full path of the Go source file where this function was called from.
func thisGoSourceFile() string {
_, file, _, _ := runtime.Caller(1)
return file
}