From: Sean Liao Date: Sat, 28 Dec 2024 19:50:11 +0000 (-0500) Subject: go/doc: resolve imports before predeclared identifiers in examples X-Git-Tag: go1.24rc2~6^2~44 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=fd5e0d26d9383ff80fd365bdfcb50d6c8a97e44c;p=gostls13.git 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 LUCI-TryBot-Result: Go LUCI Reviewed-by: Dmitri Shuralyov Auto-Submit: Ian Lance Taylor --- 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) +}