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  }