Go cover tool for maximum productivity.
It is similar to
go tool cover -html=cover.out but not leaving the terminal. It was inspired by gocovsh but I wanted it to work a bit different.
The aim is to help me in writing tests spending as little attention and key presses as possible.
- You dont leave the terminal.
- It’s non-interactive like ls, cd and most of cli commands. Life is too short to navigate menus.
- It’s precise, it only output the code you asked.
How to use
Go to the project dir, it requires to be inside the project to work (go.mod needed).
Create coverage profile as usual:
go test -coverprofile cover.out ./....
cover.out is the default profile name). By default it renders all files in the current directory recursive (
But the best part is filters. You determine what coverage target you want, you may have simple rule (all files at least 80% covered) or as much flexible as you want (separate coverage target for each file, package or function, exclude experimental subpackages or unexported functions).
Then you may write your tests with very little distraction: no typing, no clicking, no switching to browser and back, very little of scrolling.
You may also use it as an automated checker as it can return exit code 1 if something is selected. You set the rules and eliminate what breaks them.
cover --exit-code <target_filters...> && echo "You are covered!" || echo "There is something to cover"
Select by path. Paths are relative to the current directory.
. # not recursive ./wire tlog.go
Select by package name, type name, function name or combined
wire Encoder AppendValue wire.Encoder.AppendValue github.com/nikandfor/tlog/ext/tlflag.OpenWriter
File filter is a glob, function filter is a regexp.
Filter by coverage.
tlog.go:b70 # filter by file name, then by coverage: *b* for below, 70 is percent # Select all functions in a file with coverage below 70% # there are 'b' (below) or 'l' (less then) and 'a' (above) or 'g' (greater then) filters Logger:b80:a10 # all methods of Logger with coverage from 10% to 80% :b80 # every function in the current directory covered below 80% recursive # function coverage is compared by default, but if `...` wildcard path filter suffix is used then file total coverage is compared. wire:l80 # functions with less than 80% coverage ext/...:l80 # files with less than 80% total coverage
Negative filter. Filter prefixed with
! unselects previously selected functions.
!unsafe.go !./ext/... !tq/parse !tlog.[a-z].+
# quotes to prevent shell substitution ./ext/... '!tlgraylog' # extensions except tlgraylog ./wire/ '!Encoder' '!Decoder' '!:a80' # functions in wire package except Encoder and Decoder methods and except well covered ...:b80 # files to cover
Examples are from tlog.