型アサーション直後の参照ミスを検出するLinterが欲しい
Goサブ会の話題。以下のような型アサーションにおけるミスを検出したい。
func exampleCast(x any) { x2, ok := x.(SomeType) if !ok { // ここで x ではなく x2 を参照してしまっている log.Printf("x is not SomeType (got %T)\n", x2) return }}
func exampleVar(x any) { x2, ok := x.(SomeType) if !ok { log.Printf("x is not SomeType (got %T)\n", x) // ここでreturnとかcontinueとかするべきだけど忘れていて、型キャスト失敗したx2が後続のコードで参照されている } log.Printf("x2 = %v\n", x2)}いくつかLinterを見繕ったけど、該当するものはなかった。
uber-go/nilawayが最も近いと思うが、Not catching possible type assertion exceptions?というイシューがあるだけで、上記のミスを検出できなかった。