リファクタリングと妥協を繰り返して君だけの.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哲学は難しい…