lib/rubocop/cop/layout/multiline_block_layout.rb in rubocop-0.89.1 vs lib/rubocop/cop/layout/multiline_block_layout.rb in rubocop-0.90.0

- old
+ new

@@ -46,12 +46,13 @@ # fit_on_one_line # | # foo(i) # bar(i) # } - class MultilineBlockLayout < Cop + class MultilineBlockLayout < Base include RangeHelp + extend AutoCorrector MSG = 'Block body expression is on the same line as ' \ 'the block start.' ARG_MSG = 'Block argument expression is not on the same line as the ' \ 'block start.' @@ -68,27 +69,10 @@ return unless node.body && node.loc.begin.line == node.body.first_line add_offense_for_expression(node, node.body, MSG) end - def autocorrect(node) - lambda do |corrector| - unless args_on_beginning_line?(node) - autocorrect_arguments(corrector, node) - expr_before_body = node.arguments.source_range.end - end - - return unless node.body - - expr_before_body ||= node.loc.begin - - if expr_before_body.line == node.body.first_line - autocorrect_body(corrector, node, node.body) - end - end - end - private def args_on_beginning_line?(node) !node.arguments? || node.loc.begin.line == node.arguments.loc.last_line @@ -114,10 +98,28 @@ end def add_offense_for_expression(node, expr, msg) expression = expr.source_range range = range_between(expression.begin_pos, expression.end_pos) - add_offense(node, location: range, message: msg) + + add_offense(range, message: msg) do |corrector| + autocorrect(corrector, node) + end + end + + def autocorrect(corrector, node) + unless args_on_beginning_line?(node) + autocorrect_arguments(corrector, node) + expr_before_body = node.arguments.source_range.end + end + + return unless node.body + + expr_before_body ||= node.loc.begin + + return unless expr_before_body.line == node.body.first_line + + autocorrect_body(corrector, node, node.body) end def autocorrect_arguments(corrector, node) end_pos = range_with_surrounding_space( range: node.arguments.source_range,