`Layout/IndentationWidth` cop の偽陽性をなおした

rails/rails で実行したら offense の出るリグレッションのパッチの PR を開いたくらい。

github.com

偽陽性の起きるケース例として、以下のようにブロックのあとにメソッド呼び出しをしているのがある。

obj = Class.new do
  private def private_property
    "That would be great."
  end
end.new

Cop 実装の解決としては、再帰で親ノードを遡って send ノードでなくなった時点で打ち切るのがポイントだった。

         def leftmost_modifier_of(node)
-          node.each_ancestor(:send).to_a.last
+          return node unless node.parent && node.parent.send_type?
+
+          leftmost_modifier_of(node.parent)
         end