ARMERIA

Rubyと競技プログラミングの話 AtCoderやCodeforcesの問題解説記事が多め。

リファクタリングと妥協を繰り返して君だけの.rubocop.ymlを作ろう

前回Rubocopで315個の警告を出した話を書きましたが、色々警告の意味を調べたり試行錯誤しながら、.rubocop.ymlを作って警告ゼロまで持っていきました。

超あまあま設定です。

Lint/NonLocalExitFromIterator:
  Enabled: false

eachの中でreturnとか書くのを許す設定。

def hoge
  (0...X).each do |x|
    return if ...
  end

  ...
end

のように、配列の要素を順に見て行って、要素の1つでもある条件を満たしていたら即メソッド終了、みたいなときに使いたい。

Lint/UnderscorePrefixedVariableName:
  Enabled: false

_で始まる変数名を許す設定。

(0...X).each do |x|
  (x...X).each do |_x|
    ...
  end
end

のように、同じ次元(?)の変数で多重ループを回すときの変数名として使いたい。

Metrics/AbcSize:
  Max: 35

Metrics/ClassLength:
  Max: 200

Metrics/CyclomaticComplexity:
  Max: 9

Metrics/MethodLength:
  Max: 25

Metrics/LineLength:
  Max: 100

Metrics/PerceivedComplexity:
  Max: 11

メトリクス系はわりと適当ですが、リファクタリングしていって「これ以上減らすのはしんどい」と思った時点での値を目安にしてます。

Style/BracesAroundHashParameters:
  Enabled: false

ハッシュをメソッドの引数にするときに{}を省略できるけど、書いてもいい設定。

Style/Documentation:
  Enabled: false

ドキュメント用のコメントは付けなくていい設定。

Style/GuardClause:
  Enabled: false

Style/Next:
  Enabled: false

ガード節にできるところでif endでもいい設定。ガード節にするかif endにするかは意味として自然なほうを採用したいので、行数だけ見てガード節にさせようとする設定はオフに。

Style/HashSyntax:
  EnforcedStyle: hash_rockets

ハッシュリテラル書くときの=>これ。前回も書きました。

Style/LineEndConcatenation:
  Enabled: false

文字列などを複数行に渡って書くときに、行末の+でつないでもよい設定。単に他言語と共通する記法にしたいだけ。

Style/NumericLiterals:
  Enabled: false

長い桁の数を10_000などと書かなくてもいい設定。慣れない。

Style/RedundantReturn:
  Enabled: false

returnがなくてもいい場所で書いてもいい設定。明示的に値を返してメソッドが終わる時は書くようにしたい。書いてないと、後ろ側に何か処理を加えたい時、そこにreturnがあるべきなのかどうか分からなくなりそう。

Style/SymbolProc:
  Enabled: false

array.map(&:somemethod)みたいな書き方ができる場所でしなくてもいい設定。慣れない。

.rubocop.ymlに書いた項目は以上。Ruby哲学は難しい…