今回のリリースは 0.58.2 以前からのバグフィックスが多めだと思う。自分の変更の中では Changes セクションにあるものが影響の大きめなものだと捉えている。
自分の変更に関するコメント。
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 の Include
や Exclude
なんかで、ワイルドカード *
指定したパスに対してドットで始まる隠しファイルを含むようにした。詳しくは以前の日記に記している。
#6235: Enable Layout/EmptyLineAfterGuardClause cop by default. (@koic)
ガード条件の後に空白を入れる Layout/EmptyLineAfterGuardClause
cop をデフォルトで有効にした。詳しくは以前の日記に記している。