// importType returns the type denoted by the qualified identifier // path.name, and adds the respective package to the imports map // as a side effect. func importType(path, name string) types.Type { pkg, err := types.DefaultImport(imports, path) if err != nil { warnf("import failed: %v", err) return nil } if obj, ok := pkg.Scope().Lookup(name).(*types.TypeName); ok { return obj.Type() } warnf("invalid type name %q", name) return nil }
// importType returns the type denoted by the qualified identifier // path.name, and adds the respective package to the imports map // as a side effect. In case of an error, importType returns nil. func importType(path, name string) types.Type { pkg, err := types.DefaultImport(imports, path) if err != nil { // This can happen if the package at path hasn't been compiled yet. warnf("import failed: %v", err) return nil } if obj, ok := pkg.Scope().Lookup(name).(*types.TypeName); ok { return obj.Type() } warnf("invalid type name %q", name) return nil }
// importType returns the type denoted by the qualified identifier // path.name, and adds the respective package to the imports map // as a side effect. func importType(path, name string) types.Type { pkg, err := types.DefaultImport(imports, path) if err != nil { // This can happen if fmt hasn't been compiled yet. // Since nothing uses formatterType anyway, don't complain. //warnf("import failed: %v", err) return nil } if obj, ok := pkg.Scope().Lookup(name).(*types.TypeName); ok { return obj.Type() } warnf("invalid type name %q", name) return nil }
func actionImport(s *Session, arg string) error { if arg == "" { return fmt.Errorf("arg required") } path := strings.Trim(arg, `"`) // check if the package specified by path is importable _, err := types.DefaultImport(s.Types.Packages, path) if err != nil { return err } astutil.AddImport(s.Fset, s.File, path) return nil }
func NewSession() (*Session, error) { var err error s := &Session{ Fset: token.NewFileSet(), Types: &types.Config{ Packages: make(map[string]*types.Package), }, } s.FilePath, err = tempFile() if err != nil { return nil, err } var initialSource string for _, pp := range printerPkgs { _, err := types.DefaultImport(s.Types.Packages, pp.path) if err == nil { initialSource = fmt.Sprintf(initialSourceTemplate, pp.path, pp.code) break } debugf("could not import %q: %s", pp.path, err) } if initialSource == "" { return nil, fmt.Errorf(`Could not load pretty printing package (even "fmt"; something is wrong)`) } s.File, err = parser.ParseFile(s.Fset, "gore_session.go", initialSource, parser.Mode(0)) if err != nil { return nil, err } s.mainBody = s.mainFunc().Body return s, nil }
// srcImporter implements the ast.Importer signature. func srcImporter(imports map[string]*types.Package, path string) (pkg *types.Package, err error) { return types.DefaultImport(imports, path) }