github.com/taylorchu/generic@v0.0.0-20171113184323-cd81575befa2/rewrite/package.go (about) 1 package rewrite 2 3 import ( 4 "bytes" 5 "go/ast" 6 "go/parser" 7 "go/printer" 8 "go/token" 9 "os" 10 ) 11 12 type Package struct { 13 Files map[string]*ast.File 14 FileSet *token.FileSet 15 } 16 17 func (p *Package) Reset() error { 18 p.FileSet = token.NewFileSet() 19 buf := new(bytes.Buffer) 20 for name, f := range p.Files { 21 buf.Reset() 22 err := printer.Fprint(buf, p.FileSet, f) 23 if err != nil { 24 return err 25 } 26 parsed, err := parser.ParseFile(p.FileSet, "", buf, 0) 27 if err != nil { 28 printer.Fprint(os.Stderr, p.FileSet, f) 29 return err 30 } 31 p.Files[name] = parsed 32 } 33 34 // Gather ast.File to create ast.Package. 35 // ast.NewPackage will try to resolve unresolved identifiers. 36 // 37 // It will return errors because the importer is not provided. 38 ast.NewPackage(p.FileSet, p.Files, nil, nil) 39 return nil 40 }