decimalnonassign
Go linter that checks if the result of a decimal operation is assigned
supported package: https://pkg.go.dev/github.com/shopspring/decimal
Motivation
The arithmetic methods in github.com/shopspring/decimal
are immutable. The result must therefore be assigned to a variable.
If no assignment is made, unexpected situations are more likely to occur.
func sample() decimal.Decimal {
result := decimal.Zero
result = result.Add(decimal.NewFromFloat(2)) // ok
result.Add(decimal.NewFromFloat(1)) // oops, Value not updated...💀
return result
}
Usage
package main
import "github.com/shopspring/decimal"
func calledDecimalMethodInRange() {
ds := []decimal.Decimal{decimal.NewFromFloat(2), decimal.NewFromFloat(2), decimal.NewFromFloat(2)}
result := decimal.Zero
for _, d := range ds {
result = result.Add(d)
result.Add(d)
}
}
Analysis
$ decimalnoassign ./...
./a.go:11:10: The result of 'Add' is not assigned
Installation
go install github.com/sho-hata/decimalnonassign/cmd/decimalnonassign@latest
Contribution
- Fork (https://github.com/sho-hata/decimalnonassign/fork)
- Create a feature branch
- Commit your changes
- Rebase your local changes against the master branch
- Run test suite with the go
test ./...
command and confirm that it passes
- Run
gofmt -s
- Create new Pull Request
License
MIT
Author
sho-hata