gox

package module
v1.9.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 5, 2022 License: Apache-2.0 Imports: 20 Imported by: 0

README

gox - Code generator for the Go language

Build Status Go Report Card GitHub release Coverage Status GoDoc

Quick start

Create a file named hellogen.go, like below:

package main

import (
	"go/token"
	"go/types"
	"os"

	"github.com/goplus/gox"
	"github.com/goplus/gox/packages"
)

func ctxRef(pkg *gox.Package, name string) gox.Ref {
	return pkg.CB().Scope().Lookup(name)
}

func main() {
	imp, _, _ := packages.NewImporter(nil, "fmt", "strings", "strconv")
	pkg := gox.NewPackage("", "main", &gox.Config{Importer: imp})
	fmt := pkg.Import("fmt")
	v := pkg.NewParam(token.NoPos, "v", types.Typ[types.String]) // v string

	pkg.NewFunc(nil, "main", nil, nil, false).BodyStart(pkg).
		DefineVarStart(token.NoPos, "a", "b").Val("Hi").Val(3).EndInit(2). // a, b := "Hi", 3
		NewVarStart(nil, "c").Val(ctxRef(pkg, "b")).EndInit(1).            // var c = b
		NewVar(gox.TyEmptyInterface, "x", "y").                            // var x, y interface{}
		Val(fmt.Ref("Println")).
		/**/ Val(ctxRef(pkg, "a")).Val(ctxRef(pkg, "b")).Val(ctxRef(pkg, "c")). // fmt.Println(a, b, c)
		/**/ Call(3).EndStmt().
		NewClosure(gox.NewTuple(v), nil, false).BodyStart(pkg).
		/**/ Val(fmt.Ref("Println")).Val(v).Call(1).EndStmt(). // fmt.Println(v)
		/**/ End().
		Val("Hello").Call(1).EndStmt(). // func(v string) { ... } ("Hello")
		End()

	gox.WriteTo(os.Stdout, pkg, false)
}

Try it like:

go mod init hello
go mod tidy
go run hellogen.go

This will dump Go source code to stdout. The following is the output content:

package main

import fmt "fmt"

func main() {
	a, b := "Hi", 3
	var c = b
	var x, y interface {
	}
	fmt.Println(a, b, c)
	func(v string) {
		fmt.Println(v)
	}("Hello")
}

Documentation

Index

Constants

View Source
const (
	DbgFlagInstruction = 1 << iota
	DbgFlagImport
	DbgFlagMatch
	DbgFlagComments
	DbgFlagWriteFile
	DbgFlagSetDebug
	DbgFlagPersistCache
	DbgFlagAll = DbgFlagInstruction | DbgFlagImport | DbgFlagMatch |
		DbgFlagComments | DbgFlagWriteFile | DbgFlagSetDebug | DbgFlagPersistCache
)

Variables

View Source
var (
	TyByte = types.Universe.Lookup("byte").Type().(*types.Basic)
	TyRune = types.Universe.Lookup("rune").Type().(*types.Basic)
)
View Source
var (
	TyEmptyInterface = types.NewInterfaceType(nil, nil)
	TyError          = types.Universe.Lookup("error").Type()
)

Functions

func ASTFile added in v0.2.0

func ASTFile(pkg *Package, testingFile bool) *ast.File

ASTFile func

func AssignableConv added in v1.0.0

func AssignableConv(pkg *Package, V, T types.Type, pv *internal.Elem) bool

func AssignableTo added in v0.6.0

func AssignableTo(pkg *Package, V, T types.Type) bool

AssignableTo reports whether a value of type V is assignable to a variable of type T.

func CheckOverloadMethod added in v1.0.2

func CheckOverloadMethod(sig *types.Signature) (funcs []types.Object, ok bool)

func CheckSignature added in v1.7.0

func CheckSignature(typ types.Type, idx, nin int) *types.Signature

func CommentedASTFile added in v1.7.10

func CommentedASTFile(pkg *Package, testingFile bool) *printer.CommentedNodes

CommentedASTFile func

func ComparableTo added in v0.6.3

func ComparableTo(pkg *Package, varg, targ *Element) bool

func Default added in v0.8.13

func Default(pkg *Package, t types.Type) types.Type

Default returns the default "typed" type for an "untyped" type; it returns the incoming type for all other types. The default type for untyped nil is untyped nil.

func DefaultConv added in v1.0.0

func DefaultConv(pkg *Package, t types.Type, expr *ast.Expr) types.Type

func HasAutoProperty added in v1.8.6

func HasAutoProperty(typ types.Type) bool

func InitBuiltin added in v1.7.6

func InitBuiltin(pkg PkgImporter, builtin *types.Package, conf *Config)

func InsertStmtFront added in v1.7.4

func InsertStmtFront(body *ast.BlockStmt, stmt ast.Stmt)

func IsFunc added in v1.8.6

func IsFunc(typ types.Type) bool

func NewArray added in v0.3.0

func NewArray(elem types.Type, len int64) types.Type

NewArray returns a new array type for the given element type and length. A negative length indicates an unknown length.

func NewChan added in v0.3.0

func NewChan(dir types.ChanDir, elem types.Type) types.Type

NewChan returns a new channel type for the given direction and element type.

func NewInstruction added in v0.7.6

func NewInstruction(pos token.Pos, pkg *types.Package, name string, instr Instruction) *types.TypeName

func NewMap added in v0.3.0

func NewMap(key, elem types.Type) types.Type

NewMap returns a new map for the given key and element types.

func NewOverloadFunc added in v0.3.0

func NewOverloadFunc(pos token.Pos, pkg *types.Package, name string, funcs ...types.Object) *types.TypeName

func NewOverloadMethod added in v1.0.2

func NewOverloadMethod(typ *types.Named, pos token.Pos, pkg *types.Package, name string, funcs ...types.Object) *types.Func

func NewPointer added in v0.3.0

func NewPointer(elem types.Type) types.Type

NewPointer returns a new pointer type for the given element (base) type.

func NewSignature added in v0.3.0

func NewSignature(recv *types.Var, params, results *types.Tuple, variadic bool) *types.Signature

NewSignature returns a new function type for the given receiver, parameters, and results, either of which may be nil. If variadic is set, the function is variadic, it must have at least one parameter, and the last parameter must be of unnamed slice type.

func NewSlice added in v0.3.0

func NewSlice(elem types.Type) types.Type

NewSlice returns a new slice type for the given element type.

func NewTemplateRecvMethod added in v1.7.0

func NewTemplateRecvMethod(typ *types.Named, pos token.Pos, pkg *types.Package, name string, fn types.Object) *types.Func

NewTemplateRecvMethod - https://github.com/goplus/gop/issues/811

func SetDebug added in v0.2.7

func SetDebug(dbgFlags int)

func WriteFile

func WriteFile(file string, pkg *Package, testingFile bool) (err error)

WriteFile func

func WriteTo

func WriteTo(dst io.Writer, pkg *Package, testingFile bool) (err error)

WriteTo func

Types

type CodeBuilder added in v0.2.0

type CodeBuilder struct {
	// contains filtered or unexported fields
}

CodeBuilder type

func (*CodeBuilder) AliasType added in v0.8.27

func (p *CodeBuilder) AliasType(name string, typ types.Type, pos ...token.Pos) *types.Named

AliasType func

func (*CodeBuilder) ArrayLit added in v0.6.0

func (p *CodeBuilder) ArrayLit(typ types.Type, arity int, keyVal ...bool) *CodeBuilder

ArrayLit func

func (*CodeBuilder) Assign added in v0.2.0

func (p *CodeBuilder) Assign(lhs int, rhs ...int) *CodeBuilder

Assign func

func (*CodeBuilder) AssignOp added in v0.8.82

func (p *CodeBuilder) AssignOp(op token.Token, src ...ast.Node) *CodeBuilder

AssignOp func

func (*CodeBuilder) AssignWith added in v0.9.20

func (p *CodeBuilder) AssignWith(lhs, rhs int, src ...ast.Node) *CodeBuilder

AssignWith func

func (*CodeBuilder) BinaryOp added in v0.2.0

func (p *CodeBuilder) BinaryOp(op token.Token, src ...ast.Node) *CodeBuilder

BinaryOp func

func (*CodeBuilder) Block added in v1.4.5

func (p *CodeBuilder) Block() *CodeBuilder

Block func

func (*CodeBuilder) Break added in v0.8.4

func (p *CodeBuilder) Break(l *Label) *CodeBuilder

Break func

func (*CodeBuilder) Call added in v0.2.0

func (p *CodeBuilder) Call(n int, ellipsis ...bool) *CodeBuilder

Call func

func (*CodeBuilder) CallInlineClosureStart added in v0.8.14

func (p *CodeBuilder) CallInlineClosureStart(sig *types.Signature, arity int, ellipsis bool) *CodeBuilder

CallInlineClosureStart func

func (*CodeBuilder) CallWith added in v0.9.20

func (p *CodeBuilder) CallWith(n int, ellipsis bool, src ...ast.Node) *CodeBuilder

CallWith func

func (*CodeBuilder) Case added in v0.6.3

func (p *CodeBuilder) Case(n int) *CodeBuilder

Case func

func (*CodeBuilder) CommCase added in v0.9.3

func (p *CodeBuilder) CommCase(n int) *CodeBuilder

CommCase

func (*CodeBuilder) Comments added in v0.9.6

func (p *CodeBuilder) Comments() *ast.CommentGroup

Comments returns the comments of next statement.

func (*CodeBuilder) CompareNil added in v0.8.15

func (p *CodeBuilder) CompareNil(op token.Token, src ...ast.Node) *CodeBuilder

CompareNil func

func (*CodeBuilder) Continue added in v0.8.4

func (p *CodeBuilder) Continue(l *Label) *CodeBuilder

Continue func

func (*CodeBuilder) Debug added in v0.9.15

func (p *CodeBuilder) Debug(dbg func(cb *CodeBuilder)) *CodeBuilder

Debug func

func (*CodeBuilder) Defer added in v0.2.0

func (p *CodeBuilder) Defer() *CodeBuilder

Defer func

func (*CodeBuilder) DefineVarStart added in v0.5.0

func (p *CodeBuilder) DefineVarStart(pos token.Pos, names ...string) *CodeBuilder

DefineVarStart func

func (*CodeBuilder) Elem added in v0.8.50

func (p *CodeBuilder) Elem(src ...ast.Node) *CodeBuilder

Elem func

func (*CodeBuilder) ElemRef added in v0.8.50

func (p *CodeBuilder) ElemRef(src ...ast.Node) *CodeBuilder

ElemRef func

func (*CodeBuilder) Else added in v0.6.3

func (p *CodeBuilder) Else() *CodeBuilder

Else func

func (*CodeBuilder) End added in v0.2.0

func (p *CodeBuilder) End() *CodeBuilder

End func

func (*CodeBuilder) EndConst added in v0.4.1

func (p *CodeBuilder) EndConst() *Element

func (*CodeBuilder) EndInit added in v0.5.0

func (p *CodeBuilder) EndInit(n int) *CodeBuilder

EndInit func

func (*CodeBuilder) EndStmt added in v0.2.0

func (p *CodeBuilder) EndStmt() *CodeBuilder

EndStmt func

func (*CodeBuilder) Fallthrough added in v0.6.3

func (p *CodeBuilder) Fallthrough() *CodeBuilder

Fallthrough func

func (*CodeBuilder) For added in v0.6.4

func (p *CodeBuilder) For() *CodeBuilder

For func

func (*CodeBuilder) ForRange added in v0.6.4

func (p *CodeBuilder) ForRange(names ...string) *CodeBuilder

ForRange func

func (*CodeBuilder) Func added in v0.9.9

func (p *CodeBuilder) Func() *Func

Func returns current func (nil means in global scope).

func (*CodeBuilder) Get added in v1.0.0

func (p *CodeBuilder) Get(idx int) *Element

Get func

func (*CodeBuilder) Go added in v0.2.0

func (p *CodeBuilder) Go() *CodeBuilder

Go func

func (*CodeBuilder) Goto added in v0.8.4

func (p *CodeBuilder) Goto(l *Label) *CodeBuilder

Goto func

func (*CodeBuilder) If added in v0.6.3

func (p *CodeBuilder) If() *CodeBuilder

If func

func (*CodeBuilder) IncDec added in v0.8.0

func (p *CodeBuilder) IncDec(op token.Token) *CodeBuilder

IncDec func

func (*CodeBuilder) Index added in v0.8.31

func (p *CodeBuilder) Index(nidx int, twoValue bool, src ...ast.Node) *CodeBuilder

Index func

func (*CodeBuilder) IndexRef added in v0.7.0

func (p *CodeBuilder) IndexRef(nidx int, src ...ast.Node) *CodeBuilder

IndexRef func

func (*CodeBuilder) InternalStack added in v1.2.8

func (p *CodeBuilder) InternalStack() *InternalStack

InternalStack: don't call it (only for internal use)

func (*CodeBuilder) Label added in v0.8.4

func (p *CodeBuilder) Label(l *Label) *CodeBuilder

Label func

func (*CodeBuilder) LookupLabel added in v1.7.8

func (p *CodeBuilder) LookupLabel(name string) (l *Label, ok bool)

LookupLabel func

func (*CodeBuilder) MapLit added in v0.6.0

func (p *CodeBuilder) MapLit(typ types.Type, arity int) *CodeBuilder

MapLit func

func (*CodeBuilder) Member added in v0.9.15

func (p *CodeBuilder) Member(name string, flag MemberFlag, src ...ast.Node) (kind MemberKind, err error)

Member func

func (*CodeBuilder) MemberRef added in v0.8.31

func (p *CodeBuilder) MemberRef(name string, src ...ast.Node) *CodeBuilder

MemberRef func

func (*CodeBuilder) MemberVal added in v0.3.5

func (p *CodeBuilder) MemberVal(name string, src ...ast.Node) *CodeBuilder

MemberVal func

func (*CodeBuilder) NewAutoVar added in v0.5.0

func (p *CodeBuilder) NewAutoVar(pos token.Pos, name string, pv **types.Var) *CodeBuilder

NewAutoVar func

func (*CodeBuilder) NewClosure added in v0.2.0

func (p *CodeBuilder) NewClosure(params, results *Tuple, variadic bool) *Func

NewClosure func

func (*CodeBuilder) NewClosureWith added in v0.2.8

func (p *CodeBuilder) NewClosureWith(sig *types.Signature) *Func

NewClosureWith func

func (*CodeBuilder) NewConstStart added in v0.6.0

func (p *CodeBuilder) NewConstStart(typ types.Type, names ...string) *CodeBuilder

NewConstStart func

func (*CodeBuilder) NewLabel added in v1.7.8

func (p *CodeBuilder) NewLabel(pos token.Pos, name string) *Label

func (*CodeBuilder) NewType added in v0.8.27

func (p *CodeBuilder) NewType(name string, pos ...token.Pos) *TypeDecl

NewType func

func (*CodeBuilder) NewVar added in v0.2.0

func (p *CodeBuilder) NewVar(typ types.Type, names ...string) *CodeBuilder

NewVar func

func (*CodeBuilder) NewVarStart added in v0.5.0

func (p *CodeBuilder) NewVarStart(typ types.Type, names ...string) *CodeBuilder

NewVarStart func

func (*CodeBuilder) None added in v0.6.1

func (p *CodeBuilder) None() *CodeBuilder

None func

func (*CodeBuilder) Pkg added in v0.2.7

func (p *CodeBuilder) Pkg() *Package

Pkg returns the package instance.

func (*CodeBuilder) Post added in v0.6.4

func (p *CodeBuilder) Post() *CodeBuilder

Post func

func (*CodeBuilder) RangeAssignThen added in v0.6.4

func (p *CodeBuilder) RangeAssignThen(pos token.Pos) *CodeBuilder

RangeAssignThen func

func (*CodeBuilder) ResetInit added in v0.9.12

func (p *CodeBuilder) ResetInit()

ResetInit resets the variable init state of CodeBuilder.

func (*CodeBuilder) ResetStmt added in v0.9.11

func (p *CodeBuilder) ResetStmt()

ResetStmt resets the statement state of CodeBuilder.

func (*CodeBuilder) Return added in v0.3.7

func (p *CodeBuilder) Return(n int, src ...ast.Node) *CodeBuilder

Return func

func (*CodeBuilder) ReturnErr added in v0.8.24

func (p *CodeBuilder) ReturnErr(outer bool) *CodeBuilder

ReturnErr func

func (*CodeBuilder) Scope added in v0.5.3

func (p *CodeBuilder) Scope() *types.Scope

Scope returns current scope.

func (*CodeBuilder) Select added in v0.9.3

func (p *CodeBuilder) Select() *CodeBuilder

Select

func (*CodeBuilder) Send added in v0.8.4

func (p *CodeBuilder) Send() *CodeBuilder

Send func

func (*CodeBuilder) SetBodyHandler added in v1.7.4

func (p *CodeBuilder) SetBodyHandler(handle func(body *ast.BlockStmt, kind int)) *CodeBuilder

func (*CodeBuilder) SetComments added in v0.9.5

func (p *CodeBuilder) SetComments(comments *ast.CommentGroup, once bool) *CodeBuilder

SetComments sets comments to next statement.

func (*CodeBuilder) Slice added in v0.8.31

func (p *CodeBuilder) Slice(slice3 bool, src ...ast.Node) *CodeBuilder

Slice func

func (*CodeBuilder) SliceLit added in v0.6.0

func (p *CodeBuilder) SliceLit(typ types.Type, arity int, keyVal ...bool) *CodeBuilder

SliceLit func

func (*CodeBuilder) Star added in v0.8.5

func (p *CodeBuilder) Star(src ...ast.Node) *CodeBuilder

Star func

func (*CodeBuilder) StructLit added in v0.8.26

func (p *CodeBuilder) StructLit(typ types.Type, arity int, keyVal bool) *CodeBuilder

StructLit func

func (*CodeBuilder) Switch added in v0.6.3

func (p *CodeBuilder) Switch() *CodeBuilder

Switch func

func (*CodeBuilder) Then added in v0.6.3

func (p *CodeBuilder) Then() *CodeBuilder

Then func

func (*CodeBuilder) Typ added in v0.7.6

func (p *CodeBuilder) Typ(typ types.Type, src ...ast.Node) *CodeBuilder

Typ func

func (*CodeBuilder) TypeAssert added in v0.9.2

func (p *CodeBuilder) TypeAssert(typ types.Type, twoValue bool, src ...ast.Node) *CodeBuilder

TypeAssert func

func (*CodeBuilder) TypeAssertThen added in v0.9.2

func (p *CodeBuilder) TypeAssertThen() *CodeBuilder

TypeAssertThen func

func (*CodeBuilder) TypeCase added in v0.9.2

func (p *CodeBuilder) TypeCase(n int) *CodeBuilder

TypeCase func

func (*CodeBuilder) TypeSwitch added in v0.9.2

func (p *CodeBuilder) TypeSwitch(name string) *CodeBuilder

TypeSwitch func

func (*CodeBuilder) UnaryOp added in v0.2.0

func (p *CodeBuilder) UnaryOp(op token.Token, twoValue ...bool) *CodeBuilder

UnaryOp func

func (*CodeBuilder) UntypedBigInt added in v1.0.0

func (p *CodeBuilder) UntypedBigInt(v *big.Int, src ...ast.Node) *CodeBuilder

UntypedBigInt func

func (*CodeBuilder) UntypedBigRat added in v1.0.0

func (p *CodeBuilder) UntypedBigRat(v *big.Rat, src ...ast.Node) *CodeBuilder

UntypedBigRat func

func (*CodeBuilder) Val added in v0.2.0

func (p *CodeBuilder) Val(v interface{}, src ...ast.Node) *CodeBuilder

Val func

func (*CodeBuilder) VarRef added in v0.2.0

func (p *CodeBuilder) VarRef(ref interface{}, src ...ast.Node) *CodeBuilder

VarRef func: p.VarRef(nil) means underscore (_)

func (*CodeBuilder) ZeroLit added in v0.7.2

func (p *CodeBuilder) ZeroLit(typ types.Type) *CodeBuilder

ZeroLit func

type CodeError added in v0.9.15

type CodeError struct {
	Msg   string
	Pos   *token.Position
	Scope *types.Scope
	Func  *Func
}

func (*CodeError) Error added in v0.9.15

func (p *CodeError) Error() string

type Config added in v0.2.0

type Config struct {
	// Fset provides source position information for syntax trees and types.
	// If Fset is nil, Load will use a new fileset, but preserve Fset's value.
	Fset *token.FileSet

	// HandleErr is called to handle errors.
	HandleErr func(err error)

	// NodeInterpreter is to interpret an ast.Node.
	NodeInterpreter NodeInterpreter

	// LoadNamed is called to load a delay-loaded named type.
	LoadNamed LoadNamedFunc

	// An Importer resolves import paths to Packages.
	Importer types.Importer

	// NewBuiltin is to create the builin package.
	NewBuiltin func(pkg PkgImporter, conf *Config) *types.Package

	// untyped bigint, untyped bigrat, untyped bigfloat
	UntypedBigInt, UntypedBigRat, UntypedBigFloat *types.Named
}

Config type

type ConstDecl added in v0.4.1

type ConstDecl struct {
	// contains filtered or unexported fields
}

func (*ConstDecl) New added in v1.5.3

func (p *ConstDecl) New(
	fn func(cb *CodeBuilder) int, iotav int, pos token.Pos, typ types.Type, names ...string) *ConstDecl

func (*ConstDecl) Next added in v1.5.3

func (p *ConstDecl) Next(iotav int, pos token.Pos, names ...string) *ConstDecl

type Contract added in v0.3.0

type Contract interface {
	Match(pkg *Package, t types.Type) bool
	String() string
}

type Element added in v0.7.6

type Element = internal.Elem

type Func added in v0.2.0

type Func struct {
	*types.Func
	// contains filtered or unexported fields
}

Func type

func (*Func) Ancestor added in v1.7.2

func (p *Func) Ancestor() *Func

Ancestor returns ancestor of a closure function. It returns itself if the specified func is a normal function.

func (*Func) BodyStart added in v0.2.0

func (p *Func) BodyStart(pkg *Package) *CodeBuilder

BodyStart func

func (*Func) End added in v0.2.0

func (p *Func) End(cb *CodeBuilder)

End is for internal use.

func (*Func) SetComments added in v1.7.14

func (p *Func) SetComments(doc *ast.CommentGroup) *Func

SetComments sets associated documentation.

type InstrFlags added in v0.8.9

type InstrFlags = token.Pos
const (
	InstrFlagEllipsis InstrFlags = 1 << iota
	InstrFlagTwoValue
)

type Instruction added in v0.7.6

type Instruction interface {
	Call(pkg *Package, args []*Element, flags InstrFlags, src ast.Node) (ret *Element, err error)
}

type InternalStack added in v1.2.8

type InternalStack = internal.Stack

type Label added in v1.7.8

type Label struct {
	types.Label
	// contains filtered or unexported fields
}

type LoadNamedFunc added in v1.0.10

type LoadNamedFunc = func(at *Package, typ *types.Named)

type MatchError added in v0.9.20

type MatchError struct {
	Src   ast.Node
	Arg   types.Type
	Param types.Type
	At    interface{}
	// contains filtered or unexported fields
}

func (*MatchError) Error added in v0.9.20

func (p *MatchError) Error() string

type MemberFlag added in v1.8.2

type MemberFlag int
const (
	MemberFlagVal MemberFlag = iota
	MemberFlagMethodAlias
	MemberFlagAutoProperty
	MemberFlagRef MemberFlag = -1
)

type MemberKind added in v0.9.15

type MemberKind int
const (
	MemberInvalid MemberKind = iota
	MemberMethod
	MemberAutoProperty
	MemberField
)

type NodeInterpreter added in v0.9.16

type NodeInterpreter interface {
	// Position gets position of a Pos.
	Position(p token.Pos) token.Position

	// LoadExpr is called to load an expr code and return its position.
	LoadExpr(expr ast.Node) (string, token.Position)

	// Caller is called to return the name of a function call.
	Caller(expr ast.Node) string
}

type Package

type Package struct {
	PkgRef

	Fset *token.FileSet
	// contains filtered or unexported fields
}

Package type

func NewPackage added in v0.2.0

func NewPackage(pkgPath, name string, conf *Config) *Package

NewPackage creates a new package.

func (*Package) AliasType added in v0.8.27

func (p *Package) AliasType(name string, typ types.Type, pos ...token.Pos) *types.Named

AliasType gives a specified type with a new name

func (*Package) Builtin added in v0.3.0

func (p *Package) Builtin() *PkgRef

Builtin returns the buitlin package.

func (*Package) CB added in v0.5.2

func (p *Package) CB() *CodeBuilder

CB returns the code builder.

func (*Package) ConstStart added in v0.4.1

func (p *Package) ConstStart() *CodeBuilder

ConstStart starts a constant expression.

func (*Package) HasTestingFile added in v1.0.0

func (p *Package) HasTestingFile() bool

HasTestingFile returns true if this package has testing files.

func (*Package) Import added in v0.2.0

func (p *Package) Import(pkgPath string) *PkgRef

Import func

func (*Package) InTestingFile added in v1.0.7

func (p *Package) InTestingFile() bool

InTestingFile returns inTestingFile or not.

func (*Package) NewAutoParam added in v0.6.5

func (p *Package) NewAutoParam(name string) *Param

NewAutoParam returns a new variable representing a function result parameter with auto type.

func (*Package) NewConstDecl added in v1.5.3

func (p *Package) NewConstDecl(scope *types.Scope) *ConstDecl

func (*Package) NewConstStart deprecated added in v0.6.0

func (p *Package) NewConstStart(scope *types.Scope, pos token.Pos, typ types.Type, names ...string) *CodeBuilder

NewConstStart creates constants with names.

Deprecated: Use NewConstDecl instead.

func (*Package) NewFunc added in v0.2.0

func (p *Package) NewFunc(recv *Param, name string, params, results *Tuple, variadic bool) *Func

NewFunc func

func (*Package) NewFuncWith added in v0.2.1

func (p *Package) NewFuncWith(
	pos token.Pos, name string, sig *types.Signature, recvTypePos func() token.Pos) (*Func, error)

NewFuncWith func

func (*Package) NewParam added in v0.2.0

func (p *Package) NewParam(pos token.Pos, name string, typ types.Type) *Param

NewParam returns a new variable representing a function parameter.

func (*Package) NewType added in v0.8.27

func (p *Package) NewType(name string, pos ...token.Pos) *TypeDecl

NewType creates a new type (which need to call InitType later).

func (*Package) NewVar added in v0.2.0

func (p *Package) NewVar(pos token.Pos, typ types.Type, names ...string) *VarDecl

func (*Package) NewVarEx added in v1.4.0

func (p *Package) NewVarEx(scope *types.Scope, pos token.Pos, typ types.Type, names ...string) *VarDecl

func (*Package) NewVarStart added in v0.6.0

func (p *Package) NewVarStart(pos token.Pos, typ types.Type, names ...string) *CodeBuilder

func (*Package) SetInTestingFile added in v1.0.0

func (p *Package) SetInTestingFile(inTestingFile bool) (old bool)

SetInTestingFile sets inTestingFile or not.

type Param added in v0.2.0

type Param = types.Var

A Variable represents a function parameters and results.

type PkgImporter added in v0.3.2

type PkgImporter interface {
	Import(pkgPath string) *PkgRef
}

type PkgRef added in v0.2.0

type PkgRef struct {

	// Types provides type information for the package.
	// The NeedTypes LoadMode bit sets this field for packages matching the
	// patterns; type information for dependencies may be missing or incomplete,
	// unless NeedDeps and NeedImports are also set.
	Types *types.Package

	// IllTyped indicates whether the package or any dependency contains errors.
	// It is set only when Types is set.
	IllTyped bool
	// contains filtered or unexported fields
}

PkgRef type is a subset of golang.org/x/tools/go/packages.Package

func (*PkgRef) EnsureImported added in v0.8.71

func (p *PkgRef) EnsureImported()

EnsureImported ensures this package is imported.

func (*PkgRef) MarkForceUsed added in v1.1.1

func (p *PkgRef) MarkForceUsed()

MarkForceUsed marks this package is force-used.

func (*PkgRef) Path added in v1.9.0

func (p *PkgRef) Path() string

Path returns the package path.

func (*PkgRef) Ref added in v0.2.0

func (p *PkgRef) Ref(name string) Ref

Ref returns the object in this package with the given name if such an object exists; otherwise it panics.

func (*PkgRef) TryRef added in v1.7.6

func (p *PkgRef) TryRef(name string) Ref

TryRef returns the object in this package with the given name if such an object exists; otherwise it returns nil.

type Ref added in v0.2.0

type Ref = types.Object

Ref type

type TemplateFunc added in v0.3.0

type TemplateFunc struct {
	*types.Func
	// contains filtered or unexported fields
}

TemplateFunc: template function

func NewTemplateFunc added in v0.3.0

func NewTemplateFunc(pos token.Pos, pkg *types.Package, name string, tsig *TemplateSignature) *TemplateFunc

NewTemplateFunc creates a template function.

func (*TemplateFunc) Type added in v0.3.0

func (p *TemplateFunc) Type() types.Type

NewTemplateFunc return the type of specified template function.

type TemplateParamType added in v0.3.0

type TemplateParamType struct {
	// contains filtered or unexported fields
}

func NewTemplateParamType added in v0.3.0

func NewTemplateParamType(idx int, name string, contract Contract) *TemplateParamType

func (*TemplateParamType) String added in v0.3.0

func (p *TemplateParamType) String() string

func (*TemplateParamType) Underlying added in v0.3.0

func (p *TemplateParamType) Underlying() types.Type

type TemplateSignature added in v0.3.0

type TemplateSignature struct {
	// contains filtered or unexported fields
}

TemplateSignature: type of template function

func NewTemplateSignature added in v0.3.0

func NewTemplateSignature(
	templateParams []*TemplateParamType,
	recv *types.Var, params, results *types.Tuple, variadic bool, tok ...token.Token) *TemplateSignature

NewTemplateSignature creates type of a template function.

func (*TemplateSignature) String added in v0.3.0

func (p *TemplateSignature) String() string

func (*TemplateSignature) Underlying added in v0.3.0

func (p *TemplateSignature) Underlying() types.Type

type Tuple added in v0.2.0

type Tuple = types.Tuple

A Tuple represents an ordered list of variables; a nil *Tuple is a valid (empty) tuple. Tuples are used as components of signatures and to represent the type of multiple assignments; they are not first class types of Go.

func NewTuple added in v0.2.0

func NewTuple(x ...*Param) *Tuple

NewTuple returns a new tuple for the given parameters.

type TypeDecl added in v0.8.27

type TypeDecl struct {
	// contains filtered or unexported fields
}

TypeDecl type

func (*TypeDecl) InitType added in v0.8.27

func (p *TypeDecl) InitType(pkg *Package, typ types.Type) *types.Named

InitType initializes a uncompleted type.

func (*TypeDecl) SetComments added in v1.7.15

func (p *TypeDecl) SetComments(doc *ast.CommentGroup) *TypeDecl

SetComments sets associated documentation.

func (*TypeDecl) Type added in v0.8.28

func (p *TypeDecl) Type() *types.Named

Type returns the type.

type TypeType added in v0.7.6

type TypeType struct {
	// contains filtered or unexported fields
}

func NewTypeType added in v0.7.6

func NewTypeType(typ types.Type) *TypeType

func (*TypeType) String added in v0.7.6

func (p *TypeType) String() string

func (*TypeType) Type added in v0.7.6

func (p *TypeType) Type() types.Type

func (*TypeType) Underlying added in v0.7.6

func (p *TypeType) Underlying() types.Type

type ValueDecl deprecated added in v0.5.0

type ValueDecl = VarDecl

ValueDecl type (only for internal use).

Deprecated: Use VarDecl instead.

type VarDecl added in v0.2.0

type VarDecl struct {
	// contains filtered or unexported fields
}

VarDecl type

func (*VarDecl) End added in v1.7.15

func (p *VarDecl) End(cb *CodeBuilder)

func (*VarDecl) InitStart added in v0.2.0

func (p *VarDecl) InitStart(pkg *Package) *CodeBuilder

Directories

Path Synopsis
bar
foo
foo/app command
go/format
Package format implements standard formatting of Go source.
Package format implements standard formatting of Go source.
go/printer
Package printer implements printing of AST nodes.
Package printer implements printing of AST nodes.
tutorial
01-Basic command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL