aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/cover
AgeCommit message (Collapse)Author
2021-03-25cmd/cover: use golang.org/x/tools/cover directlyTobias Klauser
As suggested by Bryan in CL 249759, remove the forwarding aliases in cmd/cover and use the symbols from golang.org/x/tools directly. cmd/cover is not an importable package, so it is fine to remove these exported symbols. Change-Id: I887c5e9349f2dbe4c90be57f708412b844e18081 Reviewed-on: https://go-review.googlesource.com/c/go/+/304690 Trust: Tobias Klauser <tobias.klauser@gmail.com> Reviewed-by: Bryan C. Mills <bcmills@google.com>
2021-03-15all: run gofmtPrajwal Koirala
Fixes #44980 Change-Id: Icef35319d1582d8367c8911e15d11b0224957327 GitHub-Last-Rev: 2113e97e837c1ef5de9ba6a7bd62db92e644c500 GitHub-Pull-Request: golang/go#45005 Reviewed-on: https://go-review.googlesource.com/c/go/+/301632 Reviewed-by: Ian Lance Taylor <iant@golang.org> Trust: Josh Bleecher Snyder <josharian@gmail.com>
2021-03-14cmd/cover: replace code using optimized golang.org/x/tools/coverKoichi Shiraishi
After CL 179377, this change deletes all the prior cmd/cover code and instead vendors and type aliases code using the significantly optimized golang.org/x/tools/cover, which sped up ParseProfiles by manually parsing profiles instead of a regex. The speed up was: name old time/op new time/op delta ParseLine-12 2.43µs ± 2% 0.05µs ± 8% -97.98% (p=0.000 n=10+9) name old speed new speed delta ParseLine-12 42.5MB/s ± 2% 2103.2MB/s ± 7% +4853.14% (p=0.000 n=10+9) Fixes #32211. Change-Id: Ie4e8be7502f25eb95fae7a9d8334fc97b045d53f Reviewed-on: https://go-review.googlesource.com/c/go/+/249759 Reviewed-by: Emmanuel Odeke <emmanuel@orijtech.com> Reviewed-by: Bryan C. Mills <bcmills@google.com> Trust: Emmanuel Odeke <emmanuel@orijtech.com> Trust: Bryan C. Mills <bcmills@google.com> Run-TryBot: Emmanuel Odeke <emmanuel@orijtech.com> TryBot-Result: Go Bot <gobot@golang.org>
2021-01-21all: introduce and use internal/execabsRoland Shoemaker
Introduces a wrapper around os/exec, internal/execabs, for use in all commands. This wrapper prevents exec.LookPath and exec.Command from running executables in the current directory. All imports of os/exec in non-test files in cmd/ are replaced with imports of internal/execabs. This issue was reported by RyotaK. Fixes CVE-2021-3115 Fixes #43783 Change-Id: I0423451a6e27ec1e1d6f3fe929ab1ef69145c08f Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/955304 Reviewed-by: Russ Cox <rsc@google.com> Reviewed-by: Katie Hockman <katiehockman@google.com> Reviewed-on: https://go-review.googlesource.com/c/go/+/284783 Run-TryBot: Roland Shoemaker <roland@golang.org> Reviewed-by: Katie Hockman <katie@golang.org> Trust: Roland Shoemaker <roland@golang.org>
2020-12-09all: update to use os.ReadFile, os.WriteFile, os.CreateTemp, os.MkdirTempRuss Cox
As part of #42026, these helpers from io/ioutil were moved to os. (ioutil.TempFile and TempDir became os.CreateTemp and MkdirTemp.) Update the Go tree to use the preferred names. As usual, code compiled with the Go 1.4 bootstrap toolchain and code vendored from other sources is excluded. ReadDir changes are in a separate CL, because they are not a simple search and replace. For #42026. Change-Id: If318df0216d57e95ea0c4093b89f65e5b0ababb3 Reviewed-on: https://go-review.googlesource.com/c/go/+/266365 Trust: Russ Cox <rsc@golang.org> Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2020-08-17all: replace Replace(..., -1) with ReplaceAll(...)Polina Osadcha
Change-Id: I8f7cff7a83a9c50bfa3331e8b40e4a6c2e1c0eee Reviewed-on: https://go-review.googlesource.com/c/go/+/245198 Run-TryBot: Martin Möhrmann <moehrmann@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
2020-04-30cmd/cover: include a package name in the HTML titleRob Pike
A recent change added a title to the HTML coverage report but neglected to include the package name. Add the package name here. It's a little trickier than you'd think because there may be multiple packages and we don't want to parse the files, so we just extract a directory name from the path of the first file. This will almost always be right, and has the advantage that it gives a better result for package main. There are rare cases it will get wrong, but that will be no hardship. If this turns out not to be good enough, we can refine it. Fixes #38609 Change-Id: I2201f6caef906e0b0258b90d7de518879041fe72 Reviewed-on: https://go-review.googlesource.com/c/go/+/230517 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2020-04-20cmd/cover: add <title> tag to <head> for coverage report HTML templateDavid Carter
Adds a missing <title> tag to the HTML template to make it more compliant as <title> tags are generally required for valid HTML documents. Change-Id: I1ab2a6ee221c8a79d3cc13d9ac6110f6f4963914 GitHub-Last-Rev: 6d519dc9dda01d142e7f367e43e13c37896cc0cf GitHub-Pull-Request: golang/go#38313 Reviewed-on: https://go-review.googlesource.com/c/go/+/227547 Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com> Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
2020-03-13cmd/cover: skip function declarations with blank nameszikaeroh
Function declarations with blank ("_") names do not introduce a binding, and therefore cannot be referenced or executed (in fact, they do not make it into the final compiled binary at all). As such, counters defined while annotating their bodies will always be zero. These types of functions are commonly used to create compile-time checks (e.g., stringer) which are not expected to be executed. Skip over these functions when annotating a file, preventing the unused counters from being generated and appearing as uncovered lines in coverage reports. Fixes #36264 Change-Id: I6b516cf43c430a6248d68d5f483a3902253fbdab Reviewed-on: https://go-review.googlesource.com/c/go/+/223117 Reviewed-by: Bryan C. Mills <bcmills@google.com> Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
2019-10-22syscall: respect permission bits on file opening on WindowsJason A. Donenfeld
On Windows, os.Chmod and syscall.Chmod toggle the FILE_ATTRIBUTES_ READONLY flag depending on the permission bits. That's a bit odd but I guess some compromises were made at some point and this is what was chosen to map to a Unix concept that Windows doesn't really have in the same way. That's fine. However, the logic used in Chmod was forgotten from os.Open and syscall.Open, which then manifested itself in various places, most recently, go modules' read-only behavior. This makes syscall.Open consistent with syscall.Chmod and adds a test for the permission _behavior_ using ioutil. By testing the behavior instead of explicitly testing for the attribute bits we care about, we make sure this doesn't regress in unforeseen ways in the future, as well as ensuring the test works on platforms other than Windows. In the process, we fix some tests that never worked and relied on broken behavior, as well as tests that were disabled on Windows due to the broken behavior and had TODO notes. Fixes #35033 Change-Id: I6f7cf54517cbe5f6b1678d1c24f2ab337edcc7f7 Reviewed-on: https://go-review.googlesource.com/c/go/+/202439 Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com> Reviewed-by: Bryan C. Mills <bcmills@google.com> Reviewed-by: Alex Brainman <alex.brainman@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
2019-08-30cmd/cover: skip go list when profile is emptyRhys Hiltner
Only call "go list" when explicitly listing packages. An empty coverage profile references no packages, and would otherwise lead to "go list" implicitly looking at the package in "." (which might not exist). Fixes #33855 Change-Id: I02d4e374405d86f03d105fe14648aa03b4d2284c Reviewed-on: https://go-review.googlesource.com/c/go/+/192340 Reviewed-by: Bryan C. Mills <bcmills@google.com> Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
2019-06-03cmd/cover: fix counting of blocks split by goto statementsAndrew Gerrand
When adding coverage counters to a block, the block's statement list is mutated. CL 77150 removed the part where the mutated list is assigned back to its parent node; this was confusing ast.Walk, which would then lose its place and stop walking the current block, dropping counters in the process. This change has addCounters make a copy of the list before mutating it, so that the original list doesn't change under Walk's feet. Fix #32200 Change-Id: Ia3b67d8cee860ceb7caf8748cb7a80ff9c6276e0 Reviewed-on: https://go-review.googlesource.com/c/go/+/179581 Reviewed-by: Rob Pike <r@golang.org>
2019-04-15go/token: add IsIdentifier, IsKeyword, and IsExportedDaniel Martí
Telling whether a string is a valid Go identifier can seem like an easy task, but it's easy to forget about the edge cases. For example, some implementations out there forget that an empty string or keywords like "func" aren't valid identifiers. Add a simple implementation with proper Unicode support, and start using it in cmd/cover and cmd/doc. Other pieces of the standard library reimplement part of this logic, but don't use a "func(string) bool" signature, so we're leaving them untouched for now. Add some tests too, to ensure that we actually got these edge cases correctly. Since telling whether a string is a valid identifier requires knowing that it's not a valid keyword, add IsKeyword too. The internal map was already accessible via Lookup, but "Lookup(str) != IDENT" isn't as easy to understand as IsKeyword(str). And, as per Josh's suggestion, we could have IsKeyword (and probably Lookup too) use a perfect hash function instead of a global map. Finally, for consistency with these new functions, add IsExported. That makes go/ast.IsExported a bit redundant, so perhaps it can be deprecated in favor of go/token.IsExported in the future. Clarify that token.IsExported doesn't imply token.IsIdentifier, to avoid ambiguity. Fixes #30064. Change-Id: I0e0e49215fd7e47b603ebc2b5a44086c51ba57f7 Reviewed-on: https://go-review.googlesource.com/c/go/+/169018 Run-TryBot: Daniel Martí <mvdan@mvdan.cc> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org> Reviewed-by: Alan Donovan <adonovan@google.com>
2019-04-09cmd/cover: rename temporary directory prefix for consistencyMikio Hara
This change renames the temporary directory prefix for testing to go-testcover from gotestcover. It looks like other packages have the "go-" prefix for temporary directories, such as go-build, go-tool-dist and go-nettest. Change-Id: I91ab570d33c4c1bb48e6e01451a811272f6f8b77 Reviewed-on: https://go-review.googlesource.com/c/go/+/171100 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2019-03-15cmd/cover: add go.mod file in lineDupDirBryan C. Mills
This fixes TestFuncWithDuplicateLines (introduced in CL 167257) in module mode. Updates #30746 Updates #30228 Change-Id: I7b3e7192ae23f855c373e881389874ff6ffd49ad Reviewed-on: https://go-review.googlesource.com/c/go/+/167740 Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Andrew Bonventre <andybons@golang.org>
2019-03-15cmd/cover: don't assume duplicate positions are in orderIan Lance Taylor
Fixes #30746 Change-Id: I63f2d82f14eeaab6b14e956e21ddeec56fee025b Reviewed-on: https://go-review.googlesource.com/c/go/+/167257 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rob Pike <r@golang.org>
2019-03-12cmd: ensure that GOPATH is always valid in subprocesses that execute 'go build'Bryan C. Mills
GOPATH/pkg contains, among other things, the module cache (and associated lockfiles). Fixes #30776 Change-Id: I305cb3c0daab8cedd2e6ad235d4733f66af18723 Reviewed-on: https://go-review.googlesource.com/c/go/+/167082 Reviewed-by: Jay Conrod <jayconrod@google.com>
2019-03-08internal/testenv: remove SetModVendorBryan C. Mills
It turns out not to be necessary. Russ expressed a preference for avoiding module fetches over making 'go mod tidy' work within std and cmd right away, so for now we will make the loader use the vendor directory for the standard library even if '-mod=vendor' is not set explicitly. Updates #30228 Change-Id: Idf7208e63da8cb7bfe281b93ec21b61d40334947 Reviewed-on: https://go-review.googlesource.com/c/go/+/166357 Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Jay Conrod <jayconrod@google.com>
2019-03-05all: add -mod=vendor to GOFLAGS in tests that execute 'go' commands within ↵Bryan C. Mills
std or cmd Updates #30228 Updates #30240 Updates #30241 Change-Id: Idc311ba77e99909318b5b86f8ef82d4878f73e47 Reviewed-on: https://go-review.googlesource.com/c/go/+/165378 Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Jay Conrod <jayconrod@google.com>
2019-02-20cmd/cover: fix TestHtmlUnformatted in module modeBryan C. Mills
Updates #30228 Change-Id: Id9dffa6c805ac630945bac8febe342ce633626c6 Reviewed-on: https://go-review.googlesource.com/c/162830 Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Jay Conrod <jayconrod@google.com>
2018-12-18cmd/cover: avoid repeating positionsIan Lance Taylor
When using //line directives and unformatted code it is possible for positions to repeat. Increment the final column position to avoid that. Fixes #27350 Change-Id: I2faccc31360075e9814d4a024b0f98b117f8ce97 Reviewed-on: https://go-review.googlesource.com/c/153061 Run-TryBot: Rob Pike <r@golang.org> Reviewed-by: Rob Pike <r@golang.org>
2018-12-18cmd/cover: use -toolexec in tests to run newly built cover programIan Lance Taylor
This ensures that "go test cmd/cover" tests the current cover program, not the installed cover program. Change-Id: I58e718ded7eb1cd8da448d0194262209bb025b20 Reviewed-on: https://go-review.googlesource.com/c/153058 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2018-12-11cmd/cover: simplify and correct isValidIdentifierIan Lance Taylor
Per comment on CL 120316. Updates #25280 Change-Id: I7d078de4030bd10934468e04ff696a34749bd454 Reviewed-on: https://go-review.googlesource.com/c/153500 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Reviewed-by: Rob Pike <r@golang.org>
2018-12-10cmd/cover: check that the argument of -var is validAndrea Nodari
At the moment, the cover tool does not check that the argument of -var is a valid identifier. Hence, it could generate a file that fails to compile afterwards. Updates #25280 Change-Id: I6eb1872736377680900a18a4a28ba002ab5ea8ca Reviewed-on: https://go-review.googlesource.com/c/120316 Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2018-12-06cmd/cover: run tests in parallel, don't change source directoryIan Lance Taylor
This speeds up the cmd/cover testsuite by about 40% on my laptop. Updates #26473 Updates #28386 Change-Id: I853b1b3b8c98dc89440f7b7bf5c0ade1d3d66802 Reviewed-on: https://go-review.googlesource.com/c/152817 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2018-08-22cmd/cover: fix off-by-one error in TestCoverHTMLTobias Klauser
Avoid index out of range if len(goldenLines) == len(outLines) + 1 Change-Id: Ic23a85d2b8dd06a615e35a58331e78abe4ad6703 Reviewed-on: https://go-review.googlesource.com/130396 Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2018-08-20cmd/cover: remove unused global var and the unquote functionYury Smolsky
Change-Id: I52a39f2d8f1a296f23624e3ec577d9ad1b8302f1 Reviewed-on: https://go-review.googlesource.com/126555 Run-TryBot: Yury Smolsky <yury@smolsky.by> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Alan Donovan <adonovan@google.com>
2018-07-10cmd/cover: invoke go command to find packagesRuss Cox
cmd/cover has always assumed that package x/y/z can be found in $GOPATH/src/x/y/z (roughly; by using go/build). That won't be true for too much longer. Instead, run the go command to find out where packages are. This will make 'go tool cover' safe for use with Go modules when they are in use in Go 1.11, and it continues to work with the existing Go toolchains too. An alternative would be to modify the cover profile format to record file names directly, but that would require also updating golang.org/x/tools/cover/profile and any tools that use it, which seems not worth the trouble. (That fork of the code does not contain any code to resolve package names to directory locations, so it's unaffected.) No new test here: cmd/go's TestCoverageFunc tests this code. Fixes #25318 (when people use Go 1.11 instead of vgo). Change-Id: I8769b15107aecf25f7aaf8692b724cf7d0f073d0 Reviewed-on: https://go-review.googlesource.com/122478 Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Alan Donovan <adonovan@google.com>
2018-06-18cmd/cover: fix off-by-one in test error messageRob Pike
Drive-by after previous CL. Change-Id: I87db65b65745a0d76500cce06ac276b0d7928404 Reviewed-on: https://go-review.googlesource.com/119395 Reviewed-by: Ralph Corderoy <ralph@inputplus.co.uk> Reviewed-by: Daniel Martí <mvdan@mvdan.cc> Run-TryBot: Daniel Martí <mvdan@mvdan.cc> TryBot-Result: Gobot Gobot <gobot@golang.org>
2018-06-14cmd/cover: remove use of diff in cover_test.goRob Pike
It's non-portable, and the test isn't hard to write without diff. It still produces helpful output in case of trouble: --- FAIL: TestCoverHTML (0.75s) cover_test.go:325: line 4 differs: got: case &lt;-ch:<span class="cov0" title="0"></span> want: case &lt;-ch:<span class="cov0" xitle="0"></span> This makes the test operating-system independent. Change-Id: Iff35f00cb76ba89bc1b93db01c6f994e74341f4a Reviewed-on: https://go-review.googlesource.com/118795 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2018-06-08cmd/cover: fix TestCoverHTML on Plan 9David du Colombier
CL 116975 added TestCoverHTML. However, this test is failing on Plan 9, because the GNU diff tool is called "ape/diff" instead of "diff" on Plan 9. This change replaces the "diff" command by the "ape/diff" command on Plan 9. Fixes #25795. Change-Id: I15b49868cd09f3f977aa13fffdfc430c882bf757 Reviewed-on: https://go-review.googlesource.com/117415 Run-TryBot: David du Colombier <0intro@gmail.com> Reviewed-by: Daniel Martí <mvdan@mvdan.cc> Reviewed-by: Alex Brainman <alex.brainman@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
2018-06-08cmd/cover: fix test on SolarisDavid Symonds
Solaris diff doesn't know about -d (a.k.a. --minimal). Change-Id: I86146b4b93e3d0bdea52a0fde59afca20b5bab51 Reviewed-on: https://go-review.googlesource.com/117335 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2018-06-07cmd/cover: fix sorting of profile segment boundaries, againDavid Symonds
This is a refinement of CL 114855, which fixed the empty clause case, but broke some other cases where segment boundaries can coincide for other reasons. Fixes #25767. Change-Id: I2a387c83f9d651c8358f3e11b03f6167af0eb8bf Reviewed-on: https://go-review.googlesource.com/116976 Run-TryBot: David Symonds <dsymonds@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rob Pike <r@golang.org>
2018-06-07cmd/cover: add test for HTML outputDavid Symonds
This adds a case for what was fixed in 4fe688c to prevent regression; a follow-on change will address #25767. Change-Id: Iced8cc10e2993ef7caf7e9c59ffbc7147d78ddd7 Reviewed-on: https://go-review.googlesource.com/116975 Run-TryBot: David Symonds <dsymonds@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2018-05-28cmd/cover: fix sorting of profile segment boundariesDavid Symonds
If a span of coverable code is empty (e.g. an empty select clause) then there will be two Boundary values with the same offset. In that case, the starting Boundary needs to come first so that the generated HTML output will open the <span> tag before it tries to close it. Change-Id: Ib44a8b7c36ae57757c18b6cceb7a88ffa4e95394 Reviewed-on: https://go-review.googlesource.com/114855 Reviewed-by: Rob Pike <r@golang.org> Run-TryBot: Rob Pike <r@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
2018-03-26all: use strings.Builder instead of bytes.Buffer where appropriateBrad Fitzpatrick
I grepped for "bytes.Buffer" and "buf.String" and mostly ignored test files. I skipped a few on purpose and probably missed a few others, but otherwise I think this should be most of them. Updates #18990 Change-Id: I5a6ae4296b87b416d8da02d7bfaf981d8cc14774 Reviewed-on: https://go-review.googlesource.com/102479 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2018-03-07cmd/cover: don't crash on non-gofmt'ed inputIan Lance Taylor
Without the change to cover.go, the new test fails with panic: overlapping edits: [4946,4950)->"", [4947,4947)->"thisNameMustBeVeryLongToCauseOverflowOfCounterIncrementStatementOntoNextLineForTest.Count[112]++;" The original code inserts "else{", deletes "else", and then positions a new block just after the "}" that must come before the "else". That works on gofmt'ed code, but fails if the code looks like "}else". When there is no space between the "{" and the "else", the new block is inserted into a location that we are deleting, leading to the "overlapping edits" mentioned above. This CL fixes this case by not deleting the "else" but just using the one that is already there. That requires adjust the block offset to come after the "{" that we insert. Fixes #23927 Change-Id: I40ef592490878765bbce6550ddb439e43ac525b2 Reviewed-on: https://go-review.googlesource.com/98935 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org>
2017-11-16cmd/cover: do not report coverage for assembly functionsRuss Cox
cover -func mode was reporting a coverage for function declarations without bodies - assembly functions. Since we are not annotating their code, we have no data for those functions and should not report them at all. Fixes #6880. Change-Id: I4b8cd90805accf61f54e3ee167f54f4dc10c7c59 Reviewed-on: https://go-review.googlesource.com/77152 Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-11-16cmd/cover: add //line comment pointing to original fileRuss Cox
Now that cover does not modify the formatting of the original file or add any newline characters, we can make it print a //line comment pointing back at the original, and compiler errors and panics will report accurate line numbers. Fixes #6329. Fixes #15757. Change-Id: I7b0e386112c69beafe69e0d47c5f9e9abc87c0f5 Reviewed-on: https://go-review.googlesource.com/77151 Run-TryBot: Russ Cox <rsc@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-11-13cmd/cover: modify source as text, not as ASTRuss Cox
cmd/cover rewrites Go source code to add coverage annotations. The approach to date has been to parse the code to AST, analyze it, rewrite the AST, and print it back out. This approach fails to preserve line numbers in the original code and has a very difficult time with comments, because go/printer does as well. This CL changes cmd/cover to decide what to modify based on the AST but to apply the modifications as purely textual substitutions. In this way, cmd/cover can be sure it never adds or removes a newline character, nor a comment, so all line numbers and comments are preserved. This also allows us to emit a single //line comment at the beginning of the translated file and have the compiler report errors with correct line numbers in the original file. Fixes #6329. Fixes #15757. Change-Id: Ia95f6f894bb498e80d1f91fde56cd4a8009d7f9b Reviewed-on: https://go-review.googlesource.com/77150 Reviewed-by: Ian Lance Taylor <iant@golang.org>
2017-10-17cmd/cover: don't try to attach directives to synthetic declsJay Conrod
Fixed an error that occurred in atomic mode. cover adds a global variable declaration that forces sync/atomic to be used. fixDirectives was confused by this declaration since it has an invalid position. These declarations are now skipped. Fixes #22309 Change-Id: I84f5fec13ef847fca35ad49f7704fb93b60503e0 Reviewed-on: https://go-review.googlesource.com/71351 Run-TryBot: Jay Conrod <jayconrod@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org>
2017-10-16cmd/cover: preserve compiler directives in floating commentsJay Conrod
Previously, cover printed directives (//go: comments) near the top of the file unless they were in doc comments. However, directives frequently apply to specific definitions, and they are not written in doc comments to prevent godoc from printing them. Moving all directives to the top of the file affected semantics of tests. With this change, directives are kept together with the following top-level declarations. Only directives that occur after all top-level declarations are moved. Fixes #22022 Change-Id: Ic5c61c4d3969996e4ed5abccba0989163789254c Reviewed-on: https://go-review.googlesource.com/69630 Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org> Reviewed-by: Alan Donovan <adonovan@google.com>
2017-10-06cmd/asm, cmd/cgo, cmd/compile, cmd/cover, cmd/link: use standard -V outputRuss Cox
Also add -V=full to print a unique identifier of the specific tool being invoked. This will be used for content-based staleness. Also sort and clean up a few of the flag doc comments. Change-Id: I786fe50be0b8e5f77af809d8d2dab721185c2abd Reviewed-on: https://go-review.googlesource.com/68590 Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: David Crawshaw <crawshaw@golang.org>
2017-06-02cmd/cover: take default value of total only once.Dhananjay Nakrani
Defaulting total to 1 for each function, adds up to the counting error. testing/cover.go already does this once. Fixes #20515 Change-Id: I0e3f524c2ccb628eb9a8f0a1f81c22365c24cf9a Reviewed-on: https://go-review.googlesource.com/44337 Run-TryBot: Dhananjay Nakrani <dhananjayn@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
2016-12-20cmd/cover: fix spelling mistakeKevin Burke
Change-Id: Iac7c4f22dc55c970940af33e0f0470694da5c4a6 Reviewed-on: https://go-review.googlesource.com/34654 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
2016-12-20cmd/cover: retain un-attached compiler directivesDhananjay Nakrani
Parser doesn't attach some compiler directives to anything in the tree. We have to explicitely retain them in the generated code. This change, makes cover explicitely print out any compiler directive that wasn't handled in the ast.Visitor. Fixes #18285. Change-Id: Ib60f253815e92d7fc85051a7f663a61116e40a91 Reviewed-on: https://go-review.googlesource.com/34563 Run-TryBot: Rob Pike <r@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rob Pike <r@golang.org> Reviewed-by: Russ Cox <rsc@golang.org>
2016-11-18cmd/cover: handle multiple samples from the same locationKeith Randall
So we can merge cover profiles from multiple runs. Change-Id: I1bf921e2b02063a2a62b35d21a6823062d10e5d0 Reviewed-on: https://go-review.googlesource.com/23831 Reviewed-by: Russ Cox <rsc@golang.org> Reviewed-by: Rob Pike <r@golang.org>
2016-11-17cmd/cover: don't ignore os.Create errorDaniel Martí
Failing to create the output file would give confusing errors such as: cover: invalid argument Also do out.Close() even if Execute() errored. Fixes #17951. Change-Id: I897e1d31f7996871c54fde7cb09614cafbf6c3fc Reviewed-on: https://go-review.googlesource.com/33278 Reviewed-by: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org>
2016-11-03cmd/cover: change covered block for switch/select case to exclude expressionRuss Cox
Consider a switch like switch x { case foo: f() g() } Before, the coverage annotation for the block calling f and g included in its position span the text for 'case foo:'. This looks nice in the coverage report, but it breaks the invariant that coverage blocks are disjoint if you have a more complex expression like: switch x { case func() int { return foo }(): f() g() } Then the coverage analysis wants to annotate the func literal body, which overlaps with the case body, because the case body is considered to begin at the case token. Change the annotation for a case body to start just after the colon of the case clause, avoiding any potential conflict with complex case expressions. Could have started at the colon instead, but it seemed less weird to start just after it. Fixes #16540. Change-Id: I1fec4bc2a53c7092e649dc0d4be1680a697cb79b Reviewed-on: https://go-review.googlesource.com/32612 Run-TryBot: Russ Cox <rsc@golang.org> Reviewed-by: Andrew Gerrand <adg@golang.org>
2016-10-14cmd/cover: handle gotosRob Pike
If a labeled statement is the target of a goto, we must treat it as the boundary of a new basic block, but only if it is not already the boundary of a basic block such as a labeled for loop. Fixes #16624 Now reports 100% coverage for the test in the issue. Change-Id: If118bb6ff53a96c738e169d92c03cb3ce97bad0e Reviewed-on: https://go-review.googlesource.com/30977 Reviewed-by: Ian Lance Taylor <iant@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org>