rubocop / rubocop-jp

A place for RuboCop discussions in Japanese
55 stars 2 forks source link

"マネーフォワード社内PRに見られるRubyの書き方について" をRuboCopで実装する #48

Closed pocke closed 1 year ago

pocke commented 5 years ago

https://moneyforward.com/engineers_blog/2019/02/05/ruby-code-3/

例えば、次のコードあたりはRuboCopで検出しなさそう && 実装できそうです。 シリーズ記事のようなので、他の記事も参考にすると面白そうですね

# bad
string =~ /\Afixed pattern\z/

# good
string == 'fixed pattern'
# bad
array.select{|s| s =~ /1/}

# good
array.select{|s| s.match?(/1/)}

また、String#split('')String#charsに置き換え可能であるように以前から思っているのですが、なにか反例があるような気がしていて実装できていません。軽く実装を眺めた感じ実装は違うので、エンコーディング周りとかでなにか挙動が変わるのではという不安があります。 Copを実装するとしたら注意がいりそう。

koic commented 1 year ago

すべてというわけではなさそうですが、例えば以下のように概ねのサポートができているようですので、こちらはイシューとしてクローズします。

単一の文字列を表している

Style/RedundantRegexpArgument cop で実装済みです。

String#=~やRegexp#=~への固執

Performance/RegexpMatch cop で実装されています。

string =~ /\Afixed pattern\z/

Style/ExactRegexpMatch cop で実装済みです。

先頭や末尾での一致

Performance/StartWith cop ならびに Performance/EndWith cop で実装済みです。

String#splitの乱用

Style/StringChars cop で実装済みです。

to_sの乱用

Style/RedundantInterpolation cop で実装されています。