github.com/taylorchu/generic@v0.0.0-20171113184323-cd81575befa2/rewrite/type_check.go (about)

     1  package rewrite
     2  
     3  import (
     4  	"fmt"
     5  	"go/ast"
     6  	"go/importer"
     7  	"go/types"
     8  	"strings"
     9  )
    10  
    11  func (s *Spec) typeCheck(pkg *Package) error {
    12  	if s.Local {
    13  		return nil
    14  	}
    15  
    16  	var allFiles []*ast.File
    17  	for _, f := range pkg.Files {
    18  		allFiles = append(allFiles, f)
    19  	}
    20  	allFileSets := pkg.FileSet
    21  
    22  	var errType []error
    23  	conf := types.Config{
    24  		Importer: importer.For("source", nil),
    25  		Error: func(err error) {
    26  			// Ignore undeclared name error because we want developers to use this tool
    27  			// during development process.
    28  			if strings.HasPrefix(err.(types.Error).Msg, "undeclared name: ") {
    29  				return
    30  			}
    31  			errType = append(errType, err)
    32  		},
    33  	}
    34  	conf.Check("", allFileSets, allFiles, nil)
    35  	if len(errType) > 0 {
    36  		for _, err := range errType {
    37  			fmt.Println(err)
    38  		}
    39  		return errType[0]
    40  	}
    41  	return nil
    42  }