RuboCop 0.59.0 がリリースされた

今回のリリースは 0.58.2 以前からのバグフィックスが多めだと思う。自分の変更の中では Changes セクションにあるものが影響の大きめなものだと捉えている。

github.com

自分の変更に関するコメント。

New features

#5659: Make Layout/EmptyLinesAroundClassBody aware of specifying a superclass that breaks the line. (@koic)

Layout/EmptyLinesAroundClassBody cop のオルタナティブ設定である EnforcedStyle: empty_lines の際に、スーパークラスの指定で改行をするケースに対して false positive だったものを気づくようにした。コードにすると以下のようなケース。

class Foo <
      Bar

  def do_something
  end

end

このパッチのやりとりの中で、スーパークラスの指定で改行するケースをとりしまる cop (一行で同じ行に書く) を用意しようという話になり Drenmi さんが後に対応してくれる予定。

Bug fixes

#6132: Fix a false negative for Naming/FileName when Include of AllCops is the default setting. (@koic)

Naming/FileName cop で lib/layoutManager.rb といったキャメルケースのファイル名について取り締まりが出来ていなかったものを取り締まるように修正した。もちろんデフォルトの設定で除外される Gemfile, Rakefile といったものは対象外としている。

#6164: Fix incorrect autocorrect for Style/UnneededCondition when using operator method higher precedence than ||. (@koic)

Style/UnneededCondition cop の autocorrect を実行すると意味合いが変わるケースに対する修正。

|| は他の `<<, ==, +, といった演算子メソッドに比べて結合順位が低い。以下のようなコードを3項演算子に autocorrect する際にはカッコが必要。

ary << if foo
  foo
else
  bar
end

以前はこう autocorrect されていた。

ary << foo || bar

これは以下のような意味。

(ary << foo) || bar

このパッチでこのように意味を変えないように autocorrect するようになった。

ary << (foo || bar)

#6196: Fix incorrect autocorrect for Style/EmptyCaseCondition when using return in when clause and assigning the return value of case. (@koic)

Style/EmptyCaseCondition cop の autocorrect で意味合いが変わるケースがあって、それだと autocorrect 後のコードが壊れているというものを修正したもの。

以下のように when の中で return を使った場合は return の値が返る。

def foo
  v = case
      when true
        return 2
      end
end

p foo # => 2

if の場合は "void value expression" エラーになる。

def bar
  v = if true
        return 2
      end
end

bar # => hoge.rb:4: void value expression

ロジック全体をみて振る舞いを維持した autocorrect は難しいため、このケースはそのままに置いておくようにした。

#6240: Fix an auto-correct error for Style/WordArray when setting EnforcedStyle: brackets and using string interpolation in %W literal. (@koic)

Style/WordArray cop のオルタナティブ設定 EnforcedStyle: brackets での autocorrect 時にエラーになる問題を解決したもの。 以下のように式展開が入っているケースで autocorrect するとエラーになっていたものを、期待する autocorrect したコードになるようにした。

foo = 'foo'

%W(#{foo}bar baz)

Changes

#4301: Turn off autocorrect for Rails/RelativeDateConstant by default. (@koic)

Rails/RelativeDateConstant cop の autocorrect をデフォルトで無効にした。

以下のようなコードを autocorrect 前 (上) と autocorrect 後 (下) にするのに対して、ファイルをまたがって autocorrect するのが困難なため。

class A
  B = 2.weeks.ago

  def c
    B
  end
end
class A
  def self.b
    2.weeks.ago
  end

  def c
    B
  end
end

#4832: Change the path pattern (*) to match the hidden file. (@koic)

.rubocop.yml の IncludeExclude なんかで、ワイルドカード * 指定したパスに対してドットで始まる隠しファイルを含むようにした。詳しくは以前の日記に記している。

koic.hatenablog.com

#6235: Enable Layout/EmptyLineAfterGuardClause cop by default. (@koic)

ガード条件の後に空白を入れる Layout/EmptyLineAfterGuardClause cop をデフォルトで有効にした。詳しくは以前の日記に記している。

koic.hatenablog.com