diff options
| author | Sean Liao <sean@liao.dev> | 2024-12-28 14:50:11 -0500 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2024-12-30 09:19:22 -0800 |
| commit | fd5e0d26d9383ff80fd365bdfcb50d6c8a97e44c (patch) | |
| tree | 28a3087823e4cc3e6ba00fecb9118e3b6a184c5a /src | |
| parent | a785d11ac47560c12202a79a25ddd6ba610976e9 (diff) | |
| download | go-fd5e0d26d9383ff80fd365bdfcb50d6c8a97e44c.tar.xz | |
go/doc: resolve imports before predeclared identifiers in examples
Fixes #70611
Fixes #70630
Change-Id: I868e68dbdf50ce34259eeef7b3d7985ede1f4c0b
Reviewed-on: https://go-review.googlesource.com/c/go/+/639175
Reviewed-by: Ian Lance Taylor <iant@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Auto-Submit: Ian Lance Taylor <iant@google.com>
Diffstat (limited to 'src')
| -rw-r--r-- | src/go/doc/example.go | 14 | ||||
| -rw-r--r-- | src/go/doc/testdata/examples/shadow_predeclared.go | 19 | ||||
| -rw-r--r-- | src/go/doc/testdata/examples/shadow_predeclared.golden | 16 |
3 files changed, 42 insertions, 7 deletions
diff --git a/src/go/doc/example.go b/src/go/doc/example.go index 0618f2bd9b..7a8c26291d 100644 --- a/src/go/doc/example.go +++ b/src/go/doc/example.go @@ -192,13 +192,6 @@ func playExample(file *ast.File, f *ast.FuncDecl) *ast.File { // Find unresolved identifiers and uses of top-level declarations. depDecls, unresolved := findDeclsAndUnresolved(body, topDecls, typMethods) - // Remove predeclared identifiers from unresolved list. - for n := range unresolved { - if predeclaredTypes[n] || predeclaredConstants[n] || predeclaredFuncs[n] { - delete(unresolved, n) - } - } - // Use unresolved identifiers to determine the imports used by this // example. The heuristic assumes package names match base import // paths for imports w/o renames (should be good enough most of the time). @@ -251,6 +244,13 @@ func playExample(file *ast.File, f *ast.FuncDecl) *ast.File { } } + // Remove predeclared identifiers from unresolved list. + for n := range unresolved { + if predeclaredTypes[n] || predeclaredConstants[n] || predeclaredFuncs[n] { + delete(unresolved, n) + } + } + // If there are other unresolved identifiers, give up because this // synthesized file is not going to build. if len(unresolved) > 0 { diff --git a/src/go/doc/testdata/examples/shadow_predeclared.go b/src/go/doc/testdata/examples/shadow_predeclared.go new file mode 100644 index 0000000000..7e9f30d9b4 --- /dev/null +++ b/src/go/doc/testdata/examples/shadow_predeclared.go @@ -0,0 +1,19 @@ +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package foo_test + +import ( + "fmt" + + "example.com/error" +) + +func Print(s string) { + fmt.Println(s) +} + +func Example() { + Print(error.Hello) +} diff --git a/src/go/doc/testdata/examples/shadow_predeclared.golden b/src/go/doc/testdata/examples/shadow_predeclared.golden new file mode 100644 index 0000000000..65598bed62 --- /dev/null +++ b/src/go/doc/testdata/examples/shadow_predeclared.golden @@ -0,0 +1,16 @@ +-- .Play -- +package main + +import ( + "fmt" + + "example.com/error" +) + +func Print(s string) { + fmt.Println(s) +} + +func main() { + Print(error.Hello) +} |
