Documentation ¶
Overview ¶
Package cl compiles Go+ syntax trees (ast).
Index ¶
- Constants
- func ClassNameAndExt(file string) (name, clsfile, ext string)
- func GetFileClassType(file *ast.File, filename string, ...) (classType string, isTest bool)
- func NewPackage(pkgPath string, pkg *ast.Package, conf *Config) (p *gogen.Package, err error)
- func SetDebug(flags dbgFlags)
- func SetDisableRecover(disableRecover bool)
- type Class
- type Config
- type Project
- type Recorder
Constants ¶
View Source
const ( DbgFlagLoad dbgFlags = 1 << iota DbgFlagLookup FlagNoMarkAutogen DbgFlagAll = DbgFlagLoad | DbgFlagLookup )
Variables ¶
This section is empty.
Functions ¶
func ClassNameAndExt ¶ added in v1.2.0
func GetFileClassType ¶ added in v1.2.6
func GetFileClassType(file *ast.File, filename string, lookupClass func(ext string) (c *Project, ok bool)) (classType string, isTest bool)
GetFileClassType get ast.File classType
func NewPackage ¶ added in v0.7.0
NewPackage creates a Go+ package instance.
func SetDisableRecover ¶ added in v1.0.0
func SetDisableRecover(disableRecover bool)
Types ¶
type Config ¶ added in v0.9.0
type Config struct { // Types provides type information for the package (optional). Types *types.Package // Fset provides source position information for syntax trees and types (required). Fset *token.FileSet // RelativeBase is the root directory of relative path. RelativeBase string // LookupClass lookups a class by specified file extension (required). // See (*github.com/goplus/mod/gopmod.Module).LookupClass. LookupClass func(ext string) (c *Project, ok bool) // An Importer resolves import paths to Packages (optional). Importer types.Importer // A Recorder records existing objects including constants, variables and // types etc (optional). Recorder Recorder // NoFileLine = true means not to generate file line comments. NoFileLine bool // NoAutoGenMain = true means not to auto generate main func is no entry. NoAutoGenMain bool // NoSkipConstant = true means to disable optimization of skipping constants. NoSkipConstant bool // Outline = true means to skip compiling function bodies. Outline bool }
Config of loading Go+ packages.
type Recorder ¶ added in v1.1.9
type Recorder interface { // Type maps expressions to their types, and for constant // expressions, also their values. Invalid expressions are // omitted. // // For (possibly parenthesized) identifiers denoting built-in // functions, the recorded signatures are call-site specific: // if the call result is not a constant, the recorded type is // an argument-specific signature. Otherwise, the recorded type // is invalid. // // The Types map does not record the type of every identifier, // only those that appear where an arbitrary expression is // permitted. For instance, the identifier f in a selector // expression x.f is found only in the Selections map, the // identifier z in a variable declaration 'var z int' is found // only in the Defs map, and identifiers denoting packages in // qualified identifiers are collected in the Uses map. Type(ast.Expr, types.TypeAndValue) // Instantiate maps identifiers denoting generic types or functions to their // type arguments and instantiated type. // // For example, Instantiate will map the identifier for 'T' in the type // instantiation T[int, string] to the type arguments [int, string] and // resulting instantiated *Named type. Given a generic function // func F[A any](A), Instances will map the identifier for 'F' in the call // expression F(int(1)) to the inferred type arguments [int], and resulting // instantiated *Signature. // // Invariant: Instantiating Uses[id].Type() with Instances[id].TypeArgs // results in an equivalent of Instances[id].Type. Instantiate(*ast.Ident, types.Instance) // Def maps identifiers to the objects they define (including // package names, dots "." of dot-imports, and blank "_" identifiers). // For identifiers that do not denote objects (e.g., the package name // in package clauses, or symbolic variables t in t := x.(type) of // type switch headers), the corresponding objects are nil. // // For an embedded field, Def maps the field *Var it defines. // // Invariant: Defs[id] == nil || Defs[id].Pos() == id.Pos() Def(id *ast.Ident, obj types.Object) // Use maps identifiers to the objects they denote. // // For an embedded field, Use maps the *TypeName it denotes. // // Invariant: Uses[id].Pos() != id.Pos() Use(id *ast.Ident, obj types.Object) // Implicit maps nodes to their implicitly declared objects, if any. // The following node and object types may appear: // // node declared object // // *ast.ImportSpec *PkgName for imports without renames // *ast.CaseClause type-specific *Var for each type switch case clause (incl. default) // *ast.Field anonymous parameter *Var (incl. unnamed results) // *ast.FunLit function literal in *ast.OverloadFuncDecl // Implicit(node ast.Node, obj types.Object) // Select maps selector expressions (excluding qualified identifiers) // to their corresponding selections. Select(*ast.SelectorExpr, *types.Selection) // Scope maps ast.Nodes to the scopes they define. Package scopes are not // associated with a specific node but with all files belonging to a package. // Thus, the package scope can be found in the type-checked Package object. // Scopes nest, with the Universe scope being the outermost scope, enclosing // the package scope, which contains (one or more) files scopes, which enclose // function scopes which in turn enclose statement and function literal scopes. // Note that even though package-level functions are declared in the package // scope, the function scopes are embedded in the file scope of the file // containing the function declaration. // // The following node types may appear in Scopes: // // *ast.File // *ast.FuncType // *ast.TypeSpec // *ast.BlockStmt // *ast.IfStmt // *ast.SwitchStmt // *ast.TypeSwitchStmt // *ast.CaseClause // *ast.CommClause // *ast.ForStmt // *ast.RangeStmt // *ast.ForPhraseStmt // *ast.ForPhrase // *ast.LambdaExpr // *ast.LambdaExpr2 // Scope(ast.Node, *types.Scope) }
Recorder represents a compiling event recorder.
Source Files ¶
Click to show internal directories.
Click to hide internal directories.