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 }