github.com/taylorchu/generic@v0.0.0-20171113184323-cd81575befa2/rewrite/parse.go (about) 1 package rewrite 2 3 import ( 4 "go/ast" 5 "go/build" 6 "go/parser" 7 "go/token" 8 "path/filepath" 9 ) 10 11 func (s *Spec) parse() (*Package, error) { 12 // NOTE: this package that we try to rewrite from should not contain vendor/. 13 buildP, err := build.Import(s.Import, "", 0) 14 if err != nil { 15 return nil, err 16 } 17 fset := token.NewFileSet() 18 files := make(map[string]*ast.File) 19 for _, file := range buildP.GoFiles { 20 path := filepath.Join(buildP.Dir, file) 21 f, err := parser.ParseFile(fset, path, nil, 0) 22 if err != nil { 23 return nil, err 24 } 25 files[path] = f 26 } 27 ast.NewPackage(fset, files, nil, nil) 28 return &Package{ 29 Files: files, 30 FileSet: fset, 31 }, nil 32 }