Skip to content

Releases: bracesdev/errtrace

v0.4.0

22 Jul 05:03
44156d0

Choose a tag to compare

This release supports compile-time rewriting of source files via toolexec.
Build your package or binary with go build -toolexec errtrace and all packages
that import errtrace will be automatically instrumented with errtrace.

Added

  • Add UnwrapFrame function to extract a single frame from an error.
    You can use this to implement your own trace formatting logic.

  • Support extracting trace frames from custom errors.
    Any error value that implements TracePC() uintptr will now
    contribute to the trace.

  • Add GetCaller function for error helpers to annotate wrapped errors with
    their caller information instead of the helper. Example:

    //go:noinline
    func Wrapf(err error, msg string, args ...any) {
      caller := errtrace.GetCaller()
      err := ...
      return caller.Wrap(err)
    }
  • Implement slog.LogValuer so errors logged with log/slog log the full trace.

  • cmd/errtrace:
    Add -no-wrapn option to disable wrapping with generic WrapN functions.
    This is only useful for toolexec mode due to tooling limitations.

  • cmd/errtrace:
    Experimental support for instrumenting code with errtrace automatically
    as part of the Go build process.
    Try this out with go build -toolexec=errtrace pkg/to/build.
    Automatic instrumentation only rewrites packages that import errtrace.
    The flag -required-packages can be used to specify which packages
    are expected to import errtrace if they require rewrites.
    Example: go build -toolexec="errtrace -required-packages pkg/..." pkg/to/build

Changed

  • Update go directive in go.mod to 1.21, and drop compatibility with Go 1.20 and earlier.
  • Errors wrapped with errtrace are now compatible with log/slog-based loggers,
    and will report the full error trace when logged.

Fixed

  • cmd/errtrace: Don't exit with a non-zero status when -h is used.
  • cmd/errtrace: Don't panic on imbalanced assignments inside defer blocks.

v0.3.0

22 Dec 17:41
3e960df

Choose a tag to compare

This release adds support to the CLI for using Go package patterns like ./...
to match and transform files.
You can now use errtrace -w ./... to instrument all files in a Go module,
or errtrace -l ./... to list all files that would be changed.

Added

  • cmd/errtrace: Support Go package patterns in addition to file paths.
    Use errtrace -w ./... to transform all files under the current package
    and its descendants.

Changed

  • cmd/errtrace:
    Print a message when reading from stdin because no arguments were given.
    Use '-' as the file name to read from stdin without a warning.

v0.2.0: CLI improvements

30 Nov 16:37
e20616b

Choose a tag to compare

This release contains minor improvements to the errtrace code transformer
allowing it to fit more use cases.

Added

  • cmd/errtrace: Add -l flag to print files that would be changed without changing them. You can use this to build a check to verify that your code is instrumented.

  • cmd/errtrace: Support opt-out on lines with a //errtrace:skip comment. Optionally, a reason may be specified alongside the comment. The command will print a warning for any unused //errtrace:skip comments.

    if err != nil {
      return io.EOF //errtrace:skip(io.Reader expects io.EOF)
    }

v0.1.1

29 Nov 02:57
6b2cef1

Choose a tag to compare

This release contains minor fix-ups to better consume the project.
Install this with:

go get braces.dev/[email protected]

See the prior release announcement for additional information.

Changed

  • Lower go directive in go.mod to 1.20 to allow use with older versions.

Fixed

v0.1.0: Introducing errtrace

29 Nov 02:03
a6f9caf

Choose a tag to compare

Introducing errtrace, an experimental library that provides better stack traces for your errors.

Install the library with:

go get braces.dev/[email protected]

We've also included a tool that will automatically instrument your code with errtrace.
In your project, run:

go install braces.dev/errtrace/cmd/[email protected]
git ls-files -- '*.go' | xargs errtrace -w

See README for more information.