summaryrefslogtreecommitdiff
path: root/src/go/doc/testdata
Commit message (Collapse)AuthorAgeFilesLines
* go/doc: add NewFromFiles with support for classifying examplesDmitri Shuralyov2019-11-121-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This CL is based on work started by Joe Tsai in CL 94855. It's rebased on top of the latest master branch, and addresses various code review comments and findings from attempting to use the original CL in practice. The testing package documents a naming convention for examples so that documentation tools can associate them with: • a package (Example or Example_suffix) • a function F (ExampleF or ExampleF_suffix) • a type T (ExampleT or ExampleT_suffix) • a method T.M (ExampleT_M or ExampleT_M_suffix) This naming convention is in widespread use and enforced via existing go vet checks. This change adds first-class support for classifying examples to go/doc, the package responsible for computing package documentation from Go AST. There isn't a way to supply test files to New that works well. External test files may have a package name with "_test" suffix, so ast.NewPackage may end up using the wrong package name if given test files. A workaround is to add test files to *ast.Package.Files after it is returned from ast.NewPackage: pkg, _ := ast.NewPackage(fset, goFiles, ...) for name, f := range testGoFiles { pkg.Files[name] = f } p := doc.New(pkg, ...) But that is not a good API. After nearly 8 years, a new entry-point is added to the go/doc package, the function NewFromFiles. It accepts a Go package in the form of a list of parsed Go files (including _test.go files) and an import path. The caller is responsible with filtering out files based on build constraints, as was the case before with New. NewFromFiles computes package documentation from .go files, extracts examples from _test.go files and classifies them. Examples fields are added to Package, Type, and Func. They are documented to only be populated with examples found in _test.go files provided to NewFromFiles. The new behavior is: 1. NewFromFiles computes package documentation from provided parsed .go files. It extracts examples from _test.go files. 2. It assigns each Example to corresponding Package, Type, or Func. 3. It sets the Suffix field in each example to the suffix. 4. Malformed examples are skipped. This change implements behavior that matches the current behavior of existing godoc-like tools, and will enable them to rely on the logic in go/doc instead of reimplementing it themselves. Fixes #23864 Change-Id: Iae834f2ff92fbd1c93a9bb7c2bf47d619bee05cf Reviewed-on: https://go-review.googlesource.com/c/go/+/204830 Run-TryBot: Dmitri Shuralyov <dmitshur@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org>
* Revert "go/parser: include more comments in a struct or interface"Agniva De Sarker2019-07-084-339/+0
| | | | | | | | | | | | | | This reverts commit https://golang.org/cl/161177/. Reason for revert: this led to non-contiguous comments spaced by an empty line to be grouped into a single CommentGroup Fixes #32944 Updates #10858 Change-Id: I5e16663b308c3b560496da8e66c33befdf9ed9dd Reviewed-on: https://go-review.googlesource.com/c/go/+/185040 Reviewed-by: Robert Griesemer <gri@golang.org>
* go/parser: include more comments in a struct or interfaceAgniva De Sarker2019-03-064-0/+339
| | | | | | | | | | | | | | | While parsing inside a struct or an interface, skipping over empty lines too to collect the next group of comments. We do not need to skip over more than 1 empty line since gofmt already removes multiple empty consecutive lines. Fixes #10858 Change-Id: I0c97b65b5fc44e225e5dc7871ace24f43419ce08 Reviewed-on: https://go-review.googlesource.com/c/go/+/161177 Run-TryBot: Robert Griesemer <gri@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org>
* go/doc: tune factory method association logicAgniva De Sarker2018-12-044-0/+85
| | | | | | | | | | | | | | | Ignore predeclared types (such as error) in result parameter lists when determining with which result type a method should be associated with. This change will again associate common factory functions with the first result type even if there are more than one result, as long as the others are predeclared types. Fixes #27928 Change-Id: Ia2aeaed15fc4c8debdeeaf729cc7fbba1612cafb Reviewed-on: https://go-review.googlesource.com/c/141617 Run-TryBot: Robert Griesemer <gri@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org>
* go/doc: classify function returning slice or array of T as constructorThomas Wanielista2018-06-124-36/+30
| | | | | | | | | | | | | | | | | | | | | | | | Previously, go/doc would only consider functions and slices that return types of T or any number of pointers to T: *T, **T, etc. This change expands the definition of a constructor to include functions that return arrays of a type (or pointer to that type) in its first return. With this change, the following return types also classify a function as a constructor of type T: [1]T [1]*T [1]**T (and so on) Fixes #22856. Change-Id: I37957c5f2d6a7b2ceeb3fbaef359057f2039393d Reviewed-on: https://go-review.googlesource.com/85355 Run-TryBot: Robert Griesemer <gri@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org>
* go/doc: tune association of a function with a typeAgniva De Sarker2018-04-104-0/+140
| | | | | | | | | | | | | | | | | | Previously, we used to associate a function with its first returned type assuming that it is a factory function for that type. However, a function may return multiple types in which case it is usually doing something else. Check for multiple return types, and treat it as a normal function in that case. Maintain same behavior if the function returns just one type. Fixes #12839 Change-Id: Ic4ac11d322996f216f593b71f4e61ad4270d5213 Reviewed-on: https://go-review.googlesource.com/105575 Reviewed-by: Robert Griesemer <gri@golang.org> Run-TryBot: Robert Griesemer <gri@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
* go/doc: replace unexported values with underscore if necessaryJoe Tsai2018-02-274-0/+123
| | | | | | | | | | | | | | | When a var or const declaration contains a mixture of exported and unexported identifiers, replace the unexported identifiers with underscore. Otherwise, the LHS and the RHS may mismatch or the declaration may mismatch with an iota from above. Fixes #22426 Change-Id: Icd5fb81b4ece647232a9f7d05cb140227091e9cb Reviewed-on: https://go-review.googlesource.com/94877 Run-TryBot: Joe Tsai <thebrokentoaster@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org>
* Revert "go/printer: forbid empty line before first comment in block"Joe Tsai2017-12-014-4/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit 08f19bbde1b01227fdc2fa2d326e4029bb74dd96. Reason for revert: The changed transformation takes effect on a larger set of code snippets than expected. For example, this: func foo() { // Comment bar() } becomes: func foo() { // Comment bar() } This is an unintended consequence. Change-Id: Ifca88d6267dab8a8170791f7205124712bf8ace8 Reviewed-on: https://go-review.googlesource.com/81335 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Joe Tsai <joetsai@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
* go/printer: forbid empty line before first comment in blockJoe Tsai2017-11-024-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | To improve readability when exported fields are removed, forbid the printer from emitting an empty line before the first comment in a const, var, or type block. Also, when printing the "Has filtered or unexported fields." message, add an empty line before it to separate the message from the struct or interfact contents. Before the change: <<< type NamedArg struct { // Name is the name of the parameter placeholder. // // If empty, the ordinal position in the argument list will be // used. // // Name must omit any symbol prefix. Name string // Value is the value of the parameter. // It may be assigned the same value types as the query // arguments. Value interface{} // contains filtered or unexported fields } >>> After the change: <<< type NamedArg struct { // Name is the name of the parameter placeholder. // // If empty, the ordinal position in the argument list will be // used. // // Name must omit any symbol prefix. Name string // Value is the value of the parameter. // It may be assigned the same value types as the query // arguments. Value interface{} // contains filtered or unexported fields } >>> Fixes #18264 Change-Id: I9fe17ca39cf92fcdfea55064bd2eaa784ce48c88 Reviewed-on: https://go-review.googlesource.com/71990 Run-TryBot: Joe Tsai <thebrokentoaster@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org>
* go/doc: fix constant type propagationgriesemer2017-10-098-17/+172
| | | | | | | | | | | | | | | | | | | | | The old code was seriously broken: It assumed that a constant declaration without a type would always inherit the type of the previous declaration, but in fact it only inherits the type of the previous declaration when there's no type and no constant value. While fixing this bug, found that the result was not sorted deterministically in all situations due to a poor choice of order value (which led to spurious test failures since the tests assume deterministic outputs). Fixed that as well. Added new test cases and fixed some old (broken) tests. Fixes #16153. Change-Id: I95b480e019b0fd3538638caba02fe651c69e0513 Reviewed-on: https://go-review.googlesource.com/68730 Reviewed-by: Alan Donovan <adonovan@google.com>
* all: revert "all: prefer strings.LastIndexByte over strings.LastIndex"Marvin Stenger2017-10-051-1/+1
| | | | | | | | | | This reverts https://golang.org/cl/66372. Updates #22148 Change-Id: I3e94af3dfc11a2883bf28e1d5e1f32f98760b3ee Reviewed-on: https://go-review.googlesource.com/68431 Reviewed-by: Ian Lance Taylor <iant@golang.org>
* all: prefer strings.LastIndexByte over strings.LastIndexMarvin Stenger2017-09-271-1/+1
| | | | | | | | | | | | | | | strings.LastIndexByte was introduced in go1.5 and it can be used effectively wherever the second argument to strings.LastIndex is exactly one byte long. This avoids generating unnecessary string symbols and saves a few calls to strings.LastIndex. Change-Id: I7b5679d616197b055cffe6882a8675d24a98b574 Reviewed-on: https://go-review.googlesource.com/66372 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
* go/doc: classify function returning slice of T as constructorThomas Wanielista2017-08-224-0/+168
| | | | | | | | | | | | | | | | | | | | | | | Previously, go/doc would only consider functions that return types of T or any number of pointers to T: *T, **T, etc. This change expands the definition of a constructor to also include functions that return slices of a type (or pointer to that type) in its first return. With this change, the following return types classify a function as a constructor of type T: T *T **T (and so on) []T []*T []**T (and so on) Fixes #18063. Change-Id: I9a1a689933e13c6b8eb80b74ceec85bd4cab236d Reviewed-on: https://go-review.googlesource.com/54971 Reviewed-by: Robert Griesemer <gri@golang.org>
* go/doc: don't panic if method is missing recv typeKeegan Carruthers-Smith2016-11-114-0/+32
| | | | | | | | Fixes #17788 Change-Id: I2f8a11321dc8f10bebbc8df90ba00ec65b9ee0fa Reviewed-on: https://go-review.googlesource.com/32790 Reviewed-by: Russ Cox <rsc@golang.org>
* go/doc: hide methods on locally-declared predeclared typesLarz Conwell2016-10-064-0/+60
| | | | | | | | | | | | | | Currently if you declare a type overwriting a predeclared type and export methods on it they will be exposed in godoc, even though the type itself is not exported. This corrects that by making all methods on these types hidden, since that's the expected output. Fixes #9860 Change-Id: I14037bdcef1b4bbefcf299a143bac8bf363718e0 Reviewed-on: https://go-review.googlesource.com/20610 Reviewed-by: Russ Cox <rsc@golang.org>
* all: single space after period.Brad Fitzpatrick2016-03-025-18/+18
| | | | | | | | | | | | | | | | | | | | The tree's pretty inconsistent about single space vs double space after a period in documentation. Make it consistently a single space, per earlier decisions. This means contributors won't be confused by misleading precedence. This CL doesn't use go/doc to parse. It only addresses // comments. It was generated with: $ perl -i -npe 's,^(\s*// .+[a-z]\.) +([A-Z]),$1 $2,' $(git grep -l -E '^\s*//(.+\.) +([A-Z])') $ go test go/doc -update Change-Id: Iccdb99c37c797ef1f804a94b22ba5ee4b500c4f7 Reviewed-on: https://go-review.googlesource.com/20022 Reviewed-by: Rob Pike <r@golang.org> Reviewed-by: Dave Day <djd@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
* go/doc: don't drop "factory" functions with dot-imported result typesRobert Griesemer2016-01-084-0/+93
| | | | | | | | Fixes #13742. Change-Id: I7c8b51b60e31402bf708bf8d70e07fd06295e8ce Reviewed-on: https://go-review.googlesource.com/18393 Reviewed-by: Russ Cox <rsc@golang.org>
* go/doc: don't treat _ consts as exportedJosh Bleecher Snyder2015-02-044-8/+17
| | | | | | | | | | | | | | | | | | golang.org/cl/144110044 made _ consts treated as exported as a small, safe fix for #5397. It also introduced issue #9615. golang.org/cl/2091 then fixed the underlying issue, which was missing type information when the type was specified only for _. This cl reverts the original fix. Fixes #9615. Change-Id: I4815ad8292bb5bec18beb8c131b48949d9af8876 Reviewed-on: https://go-review.googlesource.com/3832 Reviewed-by: Robert Griesemer <gri@golang.org>
* go/doc: propagate types from unexported constantsJosh Bleecher Snyder2015-01-064-4/+89
| | | | | | | | | | | | | | | | When constants were declared using unexported constants, the type information was lost when those constants were filtered out. This CL propagates the type information of unexported constants so that it is available for display. This is a follow-up to CL 144110044, which fixed this problem specifically for _ constants. Updates #5397. Change-Id: I3f0c767a4007d88169a5634ab2870deea4e6a740 Reviewed-on: https://go-review.googlesource.com/2091 Reviewed-by: Robert Griesemer <gri@golang.org>
* go/doc: treat _ consts as exportedJosh Bleecher Snyder2014-09-184-0/+158
| | | | | | | | | Fixes #5397. LGTM=adg R=gri, adg CC=golang-codereviews, rsc https://golang.org/cl/144110044
* build: move package sources from src/pkg to srcRuss Cox2014-09-0845-0/+3454
Preparation was in CL 134570043. This CL contains only the effect of 'hg mv src/pkg/* src'. For more about the move, see golang.org/s/go14nopkg.