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  }