Open pocke opened 7 years ago
例えば、以下のようなコードはだいたいバグです。
range = 10..4 range.cover?(n) # nがどんな数値でもfalse
また、実際にバグを引き起こしていたコードとして、次のようなものがありました。
range = Time.zone.now...1.day.ago range.cover?(foo.nantoka_at)
これもnantoka_atがどのような日付であれ、cover?は必ずfalseを返します。
nantoka_at
cover?
このようなバグになりうるrangeの使い方を検出するCopがほしいです。
ただし、以下のようなrangeは始点の方が大きい数ですが普通に使用されます。
"abcde"[2..-1] # => cde "abcde"[2..-2] # => cd
これに対応するには、終点が負の数になっていたら例外的に許可すればよい気がします。 もしかしたらまだ他にも例外ケースがあるかも知れません。
終点が負の数でも、始点も負の数の時は始点の方が大きいのはバグっぽいかもしれません。
"abcde"[-2..-1] # => "de" "abcde"[-2..-2] # => "d" "abcde"[-2..-3] # => "" "abcde"[-2..-4] # => ""
@znz ありがとうございます! このケースも考慮した方が良さそうですね。。
例えば、以下のようなコードはだいたいバグです。
また、実際にバグを引き起こしていたコードとして、次のようなものがありました。
これも
nantoka_at
がどのような日付であれ、cover?
は必ずfalseを返します。このようなバグになりうるrangeの使い方を検出するCopがほしいです。
注意点
ただし、以下のようなrangeは始点の方が大きい数ですが普通に使用されます。
これに対応するには、終点が負の数になっていたら例外的に許可すればよい気がします。 もしかしたらまだ他にも例外ケースがあるかも知れません。