Skip to content

alingse/nilnesserr

Repository files navigation

nilnesserr

nilnesserr = nilness + nilerr

nilnesserr is a linter for report return nil error in Go. It combines the features of nilness and nilerr, providing a concise way to detect return an unrelated/nil-values error.

Case

case 1

err := do()
if err != nil {
    return err
}
err2 := do2()
if err2 != nil {
    return err // want `return a nil value error after check error`
}

case 2

err := do()
if err != nil {
    return err
}
_, err2 := do2()
if err2 != nil {
    return errors.Wrap(err) // want `call function with a nil value error after check error`
}

case 3

err := do()
if err != nil {
    return err
}
_, err2 := do2()
if err2 != nil {
    return fmt.Errorf("call do2 failed: %w",err) // want `call variadic function with a nil value error after check error`
}

Some Real Bugs

We use https://github.com/alingse/go-linter-runner to run linter on GitHub Actions for public Go repos

Install

go install github.com/alingse/nilnesserr/cmd/nilnesserr@latest

TODO

case 3

err := do()
if err != nil {
    return err
}
_, ok := do2()
if !ok {
    return err
}

maybe this is also a bug, should return a non-nil value error after the if

License

This project is licensed under the MIT License. See the LICENSE file for details.

This project incorporates source code from two different libraries:

  1. nilness licensed under the BSD license.
  2. nilerr licensed under the MIT license.