class RuboCop::Cop::Style::MultilineIfModifier
{ result: ‘ok’ } if cond
# good
} unless cond
result: ‘this should not happen’
{
# bad
@example
Checks for uses of if/unless modifiers with multiple-lines bodies.
def configured_indentation_width
def configured_indentation_width super || 2 end
def indented_body(body, node)
def indented_body(body, node) body_source = "#{offset(node)}#{body.source}" body_source.each_line.map do |line| if line == "\n" line else line.sub(/^\s{#{offset(node).length}}/, indentation(node)) end end.join end
def on_if(node)
def on_if(node) return unless node.modifier_form? && node.body.multiline? add_offense(node, message: format(MSG, keyword: node.keyword)) do |corrector| corrector.replace(node, to_normal_if(node)) end end
def to_normal_if(node)
def to_normal_if(node) indented_body = indented_body(node.body, node) condition = "#{node.keyword} #{node.condition.source}" indented_end = "#{offset(node)}end" [condition, indented_body, indented_end].join("\n") end