dwrap

Linter dwrap forces every public function to begin with a deferring call of an error wrapping function like derrors.Wrap.
By using dwrap, you can prevent functions from returning without wrapping errors.
func Good() (err error) {
defer derrors.Wrap(&err, "Good")
doStuff()
return nil
}
func Bad() error { // <- should call defer derrors.Wrap fist.
doOtherStuff()
return nil
}
//lint:ignore dwrap this is because ...
func Ignored() error {
doOtherStuff()
return nil
}
How to use
Build your dwrap binary by writing main.go like below.
package main
import (
"github.com/qawatake/dwrap"
"golang.org/x/tools/go/analysis/unitchecker"
)
func main() {
unitchecker.Main(
dwrap.NewAnalyzer("your/derrors/pkg", "Wrap"),
)
}
Then, run go vet with your dwrap binary.
go vet -vettool=/path/to/your/dwrap ./...