12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- // +build go1.9
- // To work correctly with out of GOPATH modules, some functions needed to
- // switch from using go/build to golang.org/x/tools/go/packages. But that
- // package depends on changes to go/types that were introduced in Go 1.9. Since
- // modules weren't introduced until Go 1.11, using
- // golang.org/x/tools/go/packages can safely be restricted to users of Go 1.9
- // or above.
- package main
- import (
- "fmt"
- "strings"
- "golang.org/x/tools/go/packages"
- )
- // This method exists because of a bug in the go cover tool that
- // causes an infinite loop when you try to run `go test -cover`
- // on a package that has an import cycle defined in one of it's
- // test files. Yuck.
- func testFilesImportTheirOwnPackage(packagePath string) bool {
- meta, err := packages.Load(
- &packages.Config{
- Mode: packages.NeedName | packages.NeedImports,
- Tests: true,
- },
- packagePath,
- )
- if err != nil {
- return false
- }
- testPackageID := fmt.Sprintf("%s [%s.test]", meta[0], meta[0])
- for _, testPackage := range meta[1:] {
- if testPackage.ID != testPackageID {
- continue
- }
- for dependency := range testPackage.Imports {
- if dependency == meta[0].PkgPath {
- return true
- }
- }
- break
- }
- return false
- }
- func resolvePackageName(path string) string {
- pkg, err := packages.Load(
- &packages.Config{
- Mode: packages.NeedName,
- },
- path,
- )
- if err == nil {
- return pkg[0].PkgPath
- }
- nameArr := strings.Split(path, endGoPath)
- return nameArr[len(nameArr)-1]
- }
|