1
0
mirror of https://github.com/golang/go synced 2024-11-18 20:04:52 -07:00

cmd/go/internal/generate: error if failed to find a package

Add check for package loader to print error and fail `go generate`
command, if package no go files in package or specified import
doesn't exist.

Fixes #60079
This commit is contained in:
Kirill Che 2023-05-13 22:32:09 +04:00 committed by Kirill Che.
parent 2f0b28da19
commit d93332425a
No known key found for this signature in database
GPG Key ID: 91CCC23DB8680D12
2 changed files with 14 additions and 1 deletions

View File

@ -210,6 +210,13 @@ func runGenerate(ctx context.Context, cmd *base.Command, args []string) {
continue
}
if pkg.Error != nil && len(pkg.InternalAllGoFiles()) == 0 {
// A directory only contains a Go package if it has at least
// one .go source file, so the fact that there are no files
// implies that the package couldn't be found.
base.Errorf("%v", pkg.Error)
}
for _, file := range pkg.InternalGoFiles() {
if !generate(file) {
break
@ -222,6 +229,7 @@ func runGenerate(ctx context.Context, cmd *base.Command, args []string) {
}
}
}
base.ExitIfErrors()
}
// generate runs the generation directives for a single file.

View File

@ -6,8 +6,13 @@ go install echo.go
env PATH=$GOBIN${:}$PATH
# Test go generate for directory with no go files
go generate ./nogo
! go generate ./nogo
! stdout 'Fail'
stderr 'no Go files'
# Test go generate for module which doesn't exist should fail
! go generate foo.bar/nothing
stderr 'no required module provides package foo.bar/nothing'
# Test go generate for package where all .go files are excluded by build
# constraints