]> Cypherpunks repositories - gostls13.git/commitdiff
go/doc: ignore example functions with arguments
authorMichael Matloob <matloob@golang.org>
Fri, 13 Dec 2019 21:53:28 +0000 (16:53 -0500)
committerMichael Matloob <matloob@golang.org>
Mon, 16 Dec 2019 17:34:59 +0000 (17:34 +0000)
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 <matloob@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Jay Conrod <jayconrod@google.com>
src/cmd/go/testdata/script/test_bad_example.txt [new file with mode: 0644]
src/go/doc/example.go

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 (file)
index 0000000..1d147b6
--- /dev/null
@@ -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
index f337f2c2d7b61b2783fcf7b1fdd22b4ee9c8d7bf..868db8a23fad698a2be5eb0f89645100fb9e9bc6 100644 (file)
@@ -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") {