]> Cypherpunks repositories - gostls13.git/commitdiff
go/doc: resolve imports before predeclared identifiers in examples
authorSean Liao <sean@liao.dev>
Sat, 28 Dec 2024 19:50:11 +0000 (14:50 -0500)
committerGopher Robot <gobot@golang.org>
Mon, 30 Dec 2024 17:19:22 +0000 (09:19 -0800)
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>

src/go/doc/example.go
src/go/doc/testdata/examples/shadow_predeclared.go [new file with mode: 0644]
src/go/doc/testdata/examples/shadow_predeclared.golden [new file with mode: 0644]

index 0618f2bd9b8babc16331c20daf1f6ad51f524559..7a8c26291db1f20746133bf5ad1fba405fece7e1 100644 (file)
@@ -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 (file)
index 0000000..7e9f30d
--- /dev/null
@@ -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 (file)
index 0000000..65598be
--- /dev/null
@@ -0,0 +1,16 @@
+-- .Play --
+package main
+
+import (
+       "fmt"
+
+       "example.com/error"
+)
+
+func Print(s string) {
+       fmt.Println(s)
+}
+
+func main() {
+       Print(error.Hello)
+}