Rubocopを走らせたら664行のコードで315個のoffenseが出た
昨日の時点でのRubyでポンのコードをかけてみたら、
1 file inspected, 315 offenses detected Created .rubocop_todo.yml. Run `rubocop --config .rubocop_todo.yml`, or add inherit_from: .rubocop_todo.yml in a .rubocop.yml file.
ひどい。
警告数ランキング
吐き出された.rubocop_todo.ymlを見て、多いやつから順に見ていく。
1位:77個
# Offense count: 77 # Cop supports --auto-correct. Style/TrailingWhitespace: Enabled: false
ぶっちぎりで大量に警告されてるのが、行末のスペース。要は何かというと、インデント中の空行のスペース。
行を足すときはあったほうが何かと便利だし、わざと残してる人もけっこういるみたいで、悩みどころ。エディタでの保存時に行末スペース全部取ってくれる機能があったので、それを使うことにした。
空行のインデントは活かす前提で、空でない行の末尾スペースを警告してくれる設定があればいいのにな、とは思います。
2位:33個
# Offense count: 33 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, SupportedStyles, ProceduralMethods, FunctionalMethods, IgnoredMethods. Style/BlockDelimiters: Enabled: false
{}
とdo end
をちゃんと使い分けろって話。今のエディタだとeach
の後にスペースを入れた時点で{|| }
まで補完してくれるので、全部{}
になってた。
ぶっちゃけどっちでも良いような気もしていたが、「if や while が end で終わるので、それとそろえたほうがよい」というのを見て確かにそうだと思ったので、行をまたぐ場合はdo end
に直すことにする。ついでにエディタも乗り換えてやろうか。
3位:24個
# Offense count: 24 # Cop supports --auto-correct. # Configuration parameters: MultiSpaceAllowedForOperators. Style/SpaceAroundOperators: Enabled: false
演算子前後のスペース不足ね。はい、心当たりあります。
panels[x+1][y-1] # panels[x + 1][y - 1] って書けって言われてる
こういう奴。個人的には前者のほうが見やすいんだけど…ちょっと保留。
4位:23個
# Offense count: 23 # Cop supports --auto-correct. # Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SupportedStyles. Style/SpaceInsideHashLiteralBraces: Enabled: false
ハッシュの{
の後とか}
の前にスペースが要るか、とかそういう話。両方試したけど特にどっちでも良いかなと思ったので、デフォルト設定に従ってみる。
少し特殊ケースですが、
input_hash = { :up => Input.key_push?(K_UP), :down => Input.key_push?(K_DOWN), :right => Input.key_push?(K_RIGHT), :left => Input.key_push?(K_LEFT), :exchange => Input.key_push?(K_SPACE), :force_slide => Input.key_down?(K_Z) }
みたいな時の閉じカッコってどこに置くのがスマートなんでしょね。何となくの感覚で、最長の行の末尾+スペース1個の位置に置いてるけど。
5位:22個
# Offense count: 22 # Cop supports --auto-correct. # Configuration parameters: SupportedStyles, UseHashRocketsWithSymbolValues. Style/HashSyntax: EnforcedStyle: hash_rockets
=>
これ。すいません、これは使わせてください。好きなんです。
理由は単純で、リテラル記述と値の取り出しでキーの見た目が同じになるから、です。
hash = { :first => 1, :second => 2 } puts hash[:first] # 見た目が同じ hash = { first: 1, second: 2 } puts hash[:first] # 見た目が変わる
まとめ
315個はさすがにビビりましたが、種類自体はそんなに多くないので…一通り意味を調べて、「これは譲れねえ!」ってやつだけ見逃してもらって、自動修正(auto_correct)してもらおうと思います。
本当に怖いのは、登場回数が少なくてかつauto_correctできないやつだったりしますよね(クラスが長いとか…)