github.com/johnnyeven/libtools@v0.0.0-20191126065708-61829c1adf46/codegen/loaderx/query.go (about) 1 package loaderx 2 3 import ( 4 "go/types" 5 6 "golang.org/x/tools/go/loader" 7 ) 8 9 func NewQuery(program *loader.Program, pkgImportPath string) *Query { 10 pkgInfo := program.Package(pkgImportPath) 11 12 return &Query{ 13 pkgInfo: pkgInfo, 14 } 15 } 16 17 type Query struct { 18 pkgInfo *loader.PackageInfo 19 } 20 21 func (q *Query) Const(name string) *types.Const { 22 for ident, def := range q.pkgInfo.Defs { 23 if typeConst, ok := def.(*types.Const); ok { 24 if ident.Name == name { 25 return typeConst 26 } 27 } 28 } 29 return nil 30 } 31 32 func (q *Query) TypeName(name string) *types.TypeName { 33 for ident, def := range q.pkgInfo.Defs { 34 if typeName, ok := def.(*types.TypeName); ok { 35 if ident.Name == name { 36 return typeName 37 } 38 } 39 } 40 return nil 41 } 42 43 func (q *Query) Var(name string) *types.Var { 44 for ident, def := range q.pkgInfo.Defs { 45 if typeVar, ok := def.(*types.Var); ok { 46 if ident.Name == name { 47 return typeVar 48 } 49 } 50 } 51 return nil 52 } 53 54 func (q *Query) Func(name string) *types.Func { 55 for ident, def := range q.pkgInfo.Defs { 56 if typeFunc, ok := def.(*types.Func); ok { 57 if ident.Name == name { 58 return typeFunc 59 } 60 } 61 } 62 return nil 63 }