class RuboCop::Cop::Layout::MultilineAssignmentLayout
end
’bar’
foo = if expression
# good
@example EnforcedStyle: same_line
end
nil
rescue => e
compute
begin
foo =
# good
end
’bar’
if expression
foo =
# good
end
’bar’
foo = if expression
# bad
@example EnforcedStyle: new_line (default)
after the assignment operator.
This cop checks whether the multiline assignments have a newline
def autocorrect(node)
def autocorrect(node) case style when :new_line ->(corrector) { corrector.insert_after(node.loc.operator, "\n") } when :same_line range = range_between(node.loc.operator.end_pos, extract_rhs(node).source_range.begin_pos) ->(corrector) { corrector.replace(range, ' ') } end end
def check_assignment(node, rhs)
def check_assignment(node, rhs) return if node.send_type? return unless rhs return unless supported_types.include?(rhs.type) return if rhs.first_line == rhs.last_line check_by_enforced_style(node, rhs) end
def check_by_enforced_style(node, rhs)
def check_by_enforced_style(node, rhs) case style when :new_line check_new_line_offense(node, rhs) when :same_line check_same_line_offense(node, rhs) end end
def check_new_line_offense(node, rhs)
def check_new_line_offense(node, rhs) return unless node.loc.operator.line == rhs.first_line add_offense(node, message: NEW_LINE_OFFENSE) end
def check_same_line_offense(node, rhs)
def check_same_line_offense(node, rhs) return unless node.loc.operator.line != rhs.first_line add_offense(node, message: SAME_LINE_OFFENSE) end
def supported_types
def supported_types @supported_types ||= cop_config['SupportedTypes'].map(&:to_sym) end