Skip to content

Rangeの始点が終点より大きいコードを検出するCop #26

@pocke

Description

@pocke

例えば、以下のようなコードはだいたいバグです。

range = 10..4
range.cover?(n) # nがどんな数値でもfalse

また、実際にバグを引き起こしていたコードとして、次のようなものがありました。

range = Time.zone.now...1.day.ago
range.cover?(foo.nantoka_at)

これもnantoka_atがどのような日付であれ、cover?は必ずfalseを返します。

このようなバグになりうるrangeの使い方を検出するCopがほしいです。

注意点

ただし、以下のようなrangeは始点の方が大きい数ですが普通に使用されます。

"abcde"[2..-1] # => cde
"abcde"[2..-2] # => cd

これに対応するには、終点が負の数になっていたら例外的に許可すればよい気がします。
もしかしたらまだ他にも例外ケースがあるかも知れません。

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions