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,