Commit f3b4abd8 authored by Russ Cox's avatar Russ Cox

cmd/go: allow 'go generate' even if imports do not resolve

Maybe the go generate is generating the imports,
or maybe there's some other good reason the code
is incomplete.

The help text already says:

	Note that go generate does not parse the file, so lines that look
	like directives in comments or multiline strings will be treated
	as directives.

We'll still reject Go source files that don't begin with a package statement
or have a syntax error in the import block, but those are I think more
defensible rejections.

Fixes #16307.

Change-Id: I4f8496c02fdff993f038adfed2df4db7f067dc06
Reviewed-on: https://go-review.googlesource.com/31659
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: 's avatarRob Pike <r@golang.org>
parent 95758824
......@@ -136,6 +136,8 @@ func init() {
}
func runGenerate(cmd *Command, args []string) {
ignoreImports = true
if generateRunFlag != "" {
var err error
generateRunRE, err = regexp.Compile(generateRunFlag)
......
......@@ -2349,6 +2349,20 @@ func TestGoGenerateEnv(t *testing.T) {
}
}
func TestGoGenerateBadImports(t *testing.T) {
if runtime.GOOS == "windows" {
t.Skip("skipping because windows has no echo command")
}
// This package has an invalid import causing an import cycle,
// but go generate is supposed to still run.
tg := testgo(t)
defer tg.cleanup()
tg.setenv("GOPATH", filepath.Join(tg.pwd(), "testdata"))
tg.run("generate", "gencycle")
tg.grepStdout("hello world", "go generate gencycle did not run generator")
}
func TestGoGetCustomDomainWildcard(t *testing.T) {
testenv.MustHaveExternalNetwork(t)
......
......@@ -24,6 +24,8 @@ import (
"unicode"
)
var ignoreImports bool // control whether we ignore imports in packages
// A Package describes a single package found in a directory.
type Package struct {
// Note: These fields are part of the go command's public API.
......@@ -181,6 +183,11 @@ func (p *Package) copyBuild(pp *build.Package) {
p.TestImports = pp.TestImports
p.XTestGoFiles = pp.XTestGoFiles
p.XTestImports = pp.XTestImports
if ignoreImports {
p.Imports = nil
p.TestImports = nil
p.XTestImports = nil
}
}
// isStandardImportPath reports whether $GOROOT/src/path should be considered
......
//go:generate echo hello world
package gencycle
import _ "gencycle"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment