class RuboCop::Cop::Style::ParenthesesAroundCondition


end
y > 10)
if (x > 10 &&
# good
@example AllowInMultilineConditions: true
end
y > 10
if x > 10 &&
# good
end
y > 10)
if (x > 10 &&
# bad
@example AllowInMultilineConditions: false (default)
foo unless (bar = baz)
# bad
@example AllowSafeAssignment: false
foo unless (bar = baz)
# good
@example AllowSafeAssignment: true (default)
end
elsif x < 3
if x > 10
foo unless bar || baz
x += 1 while x < 10
# good
end
elsif (x < 3)
if (x > 10)
foo unless (bar || baz)
x += 1 while (x < 10)
# bad
@example
as a condition. It’s not a mistake.“
an assignment to indicate ”I know I’m using an assignment
By safe assignment we mean putting parentheses around
`AllowSafeAssignment` option for safe assignment.
condition of if/unless/while/until.
This cop checks for the presence of superfluous parentheses around the

def allow_multiline_conditions?

def allow_multiline_conditions?
  cop_config['AllowInMultilineConditions']
end

def message(node)

def message(node)
  kw = node.parent.keyword
  article = kw == 'while' ? 'a' : 'an'
  "Don't use parentheses around the condition of #{article} `#{kw}`."
end

def modifier_op?(node)

def modifier_op?(node)
  return false if node.if_type? && node.ternary?
  return true if node.rescue_type?
  node.basic_conditional? && node.modifier_form?
end

def on_if(node)

def on_if(node)
  return if node.ternary?
  process_control_op(node)
end

def on_while(node)

def on_while(node)
  process_control_op(node)
end

def parens_allowed?(node)

def parens_allowed?(node)
  parens_required?(node) ||
    (safe_assignment?(node) && safe_assignment_allowed?) ||
    (node.multiline? && allow_multiline_conditions?)
end

def process_control_op(node)

def process_control_op(node)
  cond = node.condition
  control_op_condition(cond) do |first_child|
    return if modifier_op?(first_child)
    return if parens_allowed?(cond)
    message = message(cond)
    add_offense(cond, message: message) do |corrector|
      ParenthesesCorrector.correct(corrector, cond)
    end
  end
end