From 499dc1c5d583a2a0735d4e408078819b84697e2e Mon Sep 17 00:00:00 2001 From: Michael Matloob Date: Fri, 13 Dec 2019 16:53:28 -0500 Subject: [PATCH] go/doc: ignore example functions with arguments An Example function with arguments is not a valid example to be run with go test. Don't return those functions from Examples. This means that some functions that were previously showing up in Examples will no longer show up. But those functions were not being tested properly so the fact that they were showing up is misleading. This fixes an issue where a confusing compiler error was showing up when running go test on a file with an invalid example. While that issue could have been fixed by returning an error, this is more consistent with the behavior of go/doc.Examples, and the tests checker in vet will catch this issue. Fixes #35284 Change-Id: I2101a7d19f38522ef9c2e50967f9cfb30d28c730 Reviewed-on: https://go-review.googlesource.com/c/go/+/211357 Run-TryBot: Michael Matloob TryBot-Result: Gobot Gobot Reviewed-by: Jay Conrod --- src/cmd/go/testdata/script/test_bad_example.txt | 13 +++++++++++++ src/go/doc/example.go | 3 +++ 2 files changed, 16 insertions(+) create mode 100644 src/cmd/go/testdata/script/test_bad_example.txt diff --git a/src/cmd/go/testdata/script/test_bad_example.txt b/src/cmd/go/testdata/script/test_bad_example.txt new file mode 100644 index 0000000000..1d147b663f --- /dev/null +++ b/src/cmd/go/testdata/script/test_bad_example.txt @@ -0,0 +1,13 @@ +# Tests that invalid examples are ignored. +# Verifies golang.org/issue/35284 +go test x_test.go + +-- x_test.go -- +package x + +import "fmt" + +func ExampleThisShouldNotHaveAParameter(thisShouldntExist int) { + fmt.Println("X") + // Output: +} \ No newline at end of file diff --git a/src/go/doc/example.go b/src/go/doc/example.go index f337f2c2d7..868db8a23f 100644 --- a/src/go/doc/example.go +++ b/src/go/doc/example.go @@ -62,6 +62,9 @@ func Examples(testFiles ...*ast.File) []*Example { if !ok || f.Recv != nil { continue } + if params := f.Type.Params; params.List != nil { + continue // function has params; not a valid example + } numDecl++ name := f.Name.Name if isTest(name, "Test") || isTest(name, "Benchmark") { -- 2.50.0