nikolaydubina / smrcptr

detect mixing pointer and value method receivers

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Same Receiver Pointer (smrcptr)

go-recipes Go Report Card OpenSSF Scorecard

Don't mix receiver types. Choose either pointers or struct types for all available methods.

Go has rules on how it automatically selects either value or method receivers, which is complex and can lead to bugs. Therefore, it is a common style recommendation12.

go install github.com/nikolaydubina/smrcptr@latest
type Pancake struct{}

func NewPancake() Pancake { return Pancake{} }

func (s *Pancake) Fry() {}

func (s Pancake) Bake() {}
$ smrcptr ./...
/pancake.go:12:1: Pancake.Fry uses pointer
/pancake.go:10:1: Pancake.NewPancake uses value
/pancake.go:14:1: Pancake.Bake uses value

Existing Linters

staticcheck

As of 2022-11-30, it does not detect that pointer and value method receivers are mixed. Most relevant analyzser ST1016 checks only name of method reciver.

$ staticcheck -checks ST1016 ./...    
main.go:9:18: methods on the same type should have the same receiver name (seen 1x "v", 2x "s") (ST1016)

Using all analyzers does not detect it either.

staticcheck -checks all ./...
main.go:9:18: methods on the same type should have the same receiver name (seen 1x "v", 2x "s") (ST1016)

References

Footnotes

  1. Go wiki https://github.com/golang/go/wiki/CodeReviewComments#receiver-type

  2. Google Go style guide https://google.github.io/styleguide/go/decisions#receiver-type

About

detect mixing pointer and value method receivers

License:MIT License


Languages

Language:Go 100.0%