`Layout/EmptyLineAfterGuardClause` cop のヒアドキュメントまわりの偽陽性を直した

RuboCop 0.59.1 でのリグレッションのフィードバックをもらった。

github.com

以下のような後置でない条件でヒアドキュメントを含むケースについて offense を発生させる偽陽性を含んでいた。

def method
  if truthy
    raise <<-MSG
      This is an error.
    MSG
  end

  value
end

RuboCop 0.59.0 で修正したパッチについて、今度は逆に別のリグレッションを引き起こす要因にしてしまっていた。

逆に以下のケースは end の後ろに空行を空けることを期待しているため、そのあたりのテストケースと実装を含めて PR を開いた。

def method
  if truthy
    raise <<-MSG
      This is an error.
    MSG
  end
  value
end

ヒアドキュメントまわりはユースケースが複雑なため、その AST を扱う処理がなかなか難しい。