// cannot be loaded at all.
// The packages that fail to load will have p.Error != nil.
func PackagesAndErrors(patterns []string) []*Package {
- if len(patterns) > 0 && strings.HasSuffix(patterns[0], ".go") {
- return []*Package{GoFilesPackage(patterns)}
+ if len(patterns) > 0 {
+ for _, p := range patterns {
+ if strings.HasSuffix(p, ".go") {
+ return []*Package{GoFilesPackage(patterns)}
+ }
+ }
}
matches := ImportPaths(patterns)
for _, f := range gofiles {
if !strings.HasSuffix(f, ".go") {
- base.Fatalf("named files must be .go files")
+ pkg := new(Package)
+ pkg.Internal.Local = true
+ pkg.Internal.CmdlineFiles = true
+ pkg.Name = f
+ pkg.Error = &PackageError{
+ Err: fmt.Sprintf("named files must be .go files: %s", pkg.Name),
+ }
+ return pkg
}
}
--- /dev/null
+env GO111MODULE=off
+
+# issue 29899: handling files with non-Go extension
+go list -e -test -json -- c.c x.go
+stdout '"Err": "named files must be .go files: c.c"'
+
+! go list -test -json -- c.c x.go
+stderr 'can''t load package: named files must be .go files: c.c'
+
+-- x.go --
+package main
+-- c.c --
+package c