aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSean Liao <sean@liao.dev>2024-12-28 14:50:11 -0500
committerGopher Robot <gobot@golang.org>2024-12-30 09:19:22 -0800
commitfd5e0d26d9383ff80fd365bdfcb50d6c8a97e44c (patch)
tree28a3087823e4cc3e6ba00fecb9118e3b6a184c5a /src
parenta785d11ac47560c12202a79a25ddd6ba610976e9 (diff)
downloadgo-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.go14
-rw-r--r--src/go/doc/testdata/examples/shadow_predeclared.go19
-rw-r--r--src/go/doc/testdata/examples/shadow_predeclared.golden16
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)
+}