Documentation ¶
Overview ¶
genbase is a base library for code generator library construction.
Do you want to check usage in real world? see https://github.com/favclip/jwg , https://github.com/favclip/qbg , https://github.com/favclip/smg .
Example ¶
package main import ( "fmt" "github.com/favclip/genbase" ) func main() { p := &genbase.Parser{SkipSemanticsCheck: false} packageInfo, err := p.ParseStringSource("main.go", ` package sample // Sample is sample! // +sample type Sample struct { A string B, C string } `) if err != nil { panic(err) } g := genbase.NewGenerator(packageInfo) g.AddImport("strings", "sg") g.AddImport(`"fmt"`, "") g.PrintHeader("sample", &[]string{}) typeInfos := packageInfo.CollectTaggedTypeInfos("+sample") for _, typeInfo := range typeInfos { g.Printf("func (obj *%s) String() string {\n", typeInfo.Name()) st, err := typeInfo.StructType() if err != nil { panic(err) } g.Printf("var ss []string\n") for _, fieldInfo := range st.FieldInfos() { for _, fieldName := range fieldInfo.Names { g.Printf("ss = append(ss, fmt.Sprintf(\"%s:%s\"))\n", fieldName.Name, "%v") } } g.Printf("return sg.Join(ss, \",\")\n") g.Printf("}\n") } generatedCode, err := g.Format() if err != nil { panic(err) } fmt.Println(string(generatedCode)) }
Output: // Code generated by sample ; DO NOT EDIT package sample import ( "fmt" sg "strings" ) func (obj *Sample) String() string { var ss []string ss = append(ss, fmt.Sprintf("A:%v")) ss = append(ss, fmt.Sprintf("B:%v")) ss = append(ss, fmt.Sprintf("C:%v")) return sg.Join(ss, ",") }
Index ¶
- Variables
- func ExprToBaseTypeName(expr ast.Expr) (string, error)
- func ExprToTypeName(expr ast.Expr) (string, error)
- func GetKeys(tag string) []string
- func IsReferenceToOtherPackage(expr ast.Expr) (bool, string)
- type FieldInfo
- func (f *FieldInfo) IsArray() bool
- func (f *FieldInfo) IsArrayPtr() bool
- func (f *FieldInfo) IsBool() bool
- func (f *FieldInfo) IsFloat32() bool
- func (f *FieldInfo) IsFloat64() bool
- func (f *FieldInfo) IsInt() bool
- func (f *FieldInfo) IsInt64() bool
- func (f *FieldInfo) IsNumber() bool
- func (f *FieldInfo) IsPtr() bool
- func (f *FieldInfo) IsPtrArray() bool
- func (f *FieldInfo) IsPtrArrayPtr() bool
- func (f *FieldInfo) IsString() bool
- func (f *FieldInfo) IsTime() bool
- func (f *FieldInfo) TypeName() string
- type FieldInfos
- type FileInfo
- type FileInfos
- type Generator
- type Import
- type PackageInfo
- type Parser
- type StructTypeInfo
- type TypeInfo
- type TypeInfos
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ( // ErrNotStructType shows argument is not ast.StructType. ErrNotStructType = errors.New("type is not ast.StructType") )
Functions ¶
func ExprToBaseTypeName ¶
ExprToBaseTypeName convert ast.Expr to type name without "*" and "[]".
func ExprToTypeName ¶
ExprToTypeName convert ast.Expr to type name.
Types ¶
type FieldInfo ¶
FieldInfo is ast.Field synonym.
func (*FieldInfo) IsArrayPtr ¶
IsArrayPtr returns true if FieldInfo is pointer of array, otherwise returns false.
func (*FieldInfo) IsFloat32 ¶
IsFloat32 returns true if FieldInfo is float32, otherwise returns false.
func (*FieldInfo) IsFloat64 ¶
IsFloat64 returns true if FieldInfo is float64, otherwise returns false.
func (*FieldInfo) IsNumber ¶
IsNumber returns true if FieldInfo is int or int64 or float32 or float64, otherwise returns false.
func (*FieldInfo) IsPtrArray ¶
IsPtrArray returns true if FieldInfo is pointer array, otherwise returns false.
func (*FieldInfo) IsPtrArrayPtr ¶
IsPtrArrayPtr returns true if FieldInfo is pointer of pointer array, otherwise returns false.
type FileInfo ¶
FileInfo is ast.File synonym.
func (*FileInfo) FindImportSpecByIdent ¶
func (file *FileInfo) FindImportSpecByIdent(packageIdent string) *ast.ImportSpec
FindImportSpecByIdent finds *ast.ImportSpec by package ident.
type Generator ¶
type Generator struct { Package *PackageInfo Buf bytes.Buffer // Accumulated output. RequiredImports []*Import }
Generator is the hub of genbase.
func NewGenerator ¶
func NewGenerator(pkg *PackageInfo) *Generator
NewGenerator is create new Generator.
func (*Generator) PrintHeader ¶
PrintHeader is print header of generated code to buffer.
type PackageInfo ¶
PackageInfo is specified package informations.
func (*PackageInfo) CollectTaggedTypeInfos ¶
func (pkg *PackageInfo) CollectTaggedTypeInfos(tag string) TypeInfos
CollectTaggedTypeInfos collects tagged TypeInfos.
func (*PackageInfo) CollectTypeInfos ¶
func (pkg *PackageInfo) CollectTypeInfos(typeNames []string) TypeInfos
CollectTypeInfos collects specified TypeInfos.
func (*PackageInfo) TypeInfos ¶
func (pkg *PackageInfo) TypeInfos() TypeInfos
TypeInfos is gathering TypeInfos, it included in package.
type Parser ¶
type Parser struct {
SkipSemanticsCheck bool
}
Parser is center of parsing strategy.
func (*Parser) ParsePackageDir ¶
func (p *Parser) ParsePackageDir(directory string) (*PackageInfo, error)
ParsePackageDir parses specified directory.
func (*Parser) ParsePackageFiles ¶
func (p *Parser) ParsePackageFiles(fileNames []string) (*PackageInfo, error)
ParsePackageFiles parses specified files.
func (*Parser) ParseStringSource ¶
func (p *Parser) ParseStringSource(fileName string, code string) (*PackageInfo, error)
type StructTypeInfo ¶
type StructTypeInfo ast.StructType
StructTypeInfo is ast.StructType synonym.
func (*StructTypeInfo) AstStructType ¶
func (st *StructTypeInfo) AstStructType() *ast.StructType
AstStructType returns *ast.StructType.
func (*StructTypeInfo) FieldInfos ¶
func (st *StructTypeInfo) FieldInfos() FieldInfos
FieldInfos returns FieldInfos of struct.
type TypeInfo ¶
type TypeInfo struct { FileInfo *FileInfo GenDecl *ast.GenDecl TypeSpec *ast.TypeSpec AnnotatedComment *ast.Comment }
TypeInfo is type information gathering. try http://goast.yuroyoro.net/ with http://play.golang.org/p/ruqMMsbDaw
func (*TypeInfo) Doc ¶
func (t *TypeInfo) Doc() *ast.CommentGroup
Doc returns *ast.CommentGroup of TypeInfo.
func (*TypeInfo) StructType ¶
func (t *TypeInfo) StructType() (*StructTypeInfo, error)
StructType returns *StructTypeInfo.