Skip to content

Rewrite Go source files to replace pkg/errors with Go 1.13 error wrapping

License

Notifications You must be signed in to change notification settings

xdg-go/go-rewrap-errors

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

go-rewrap-errors

GoDoc Build Status codecov Go Report Card License

Rewrite Go source files to replace pkg/errors with Go 1.13 error wrapping.

Written to accompany the article Rewriting Go with AST transformation. (Not actively developed.)

This program reads a Go source file and rewraps errors:

errors.Wrap(err, "text")        -> fmt.Errorf("text: %w", err)
errors.Wrapf(err, "text %s", s) -> fmt.Errorf("text %s: %w", s, err)

If the string argument to Wrap or Wrapf is fmt.Sprintf, it will be unwrapped:

errors.Wrap(err, fmt.Sprintf("text %s", s)) -> fmt.Errorf("text %s: %w", s, err)

Non-literal error/format strings will be concatenated with : %w:

const errFmt = "text %s"
errors.Wrapf(err, errFmt, s) -> fmt.Errorf(errFmt+": %w", s, err)

Any use of errors.Errorf is replaced with fmt.Errorf:

errors.Errorf("text %s", s) -> fmt.Errorf("text %s", s)

Currently, only Wrap, Wrapf, and Errorf are supported.

Any import of github.com/pkg/errors will be rewritten to errors. You should run the resulting source through goimports to clean up imports you don't need anymore.

Output defaults to stdout or the original file can be overwritten with the -w option.

Installation

NOTE: Do this outside your project directory so you don't modify your go.mod file.

go get github.com/xdg-go/go-rewrap-errors

Usage

For a single file, with output to stdout:

go-rewrap-errors source.go > new-source.go

For all Go files in a directory, recursively, overwriting in place, including goimports cleanup:

for f in $(find . -iname "*.go"); do go-rewrap-errors -w $f; goimports -w $f; done

Copyright and License

Copyright 2019 by David A. Golden. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License"). You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0

About

Rewrite Go source files to replace pkg/errors with Go 1.13 error wrapping

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages