class RuboCop::Cop::Style::ClosingParenthesisIndentation

)
y
x,
def func(
# bad
)
y
a = b * (x +
# good: when x follows opening parenthesis, align parentheses
)
y
x,
func(
# good: when x is on its own line, indent this way
@example
closing parenthesis means ‘)` preceded by a line break.
method calls, method definitions, and grouped expressions. A hanging
This cops checks the indentation of hanging closing parentheses in

def check(node, elements)

def check(node, elements)
  right_paren = node.loc.end
  return unless right_paren
  return unless begins_its_line?(right_paren)
  left_paren = node.loc.begin
  correct_column = if line_break_after_left_paren?(left_paren, elements)
                     left_paren.source_line =~ /\S/
                   else
                     left_paren.column
                   end
  @column_delta = correct_column - right_paren.column
  return if @column_delta == 0
  msg = correct_column == left_paren.column ? MSG_ALIGN : MSG_INDENT
  add_offense(node.loc.end, node.loc.end, msg)
end

def line_break_after_left_paren?(left_paren, elements)

def line_break_after_left_paren?(left_paren, elements)
  elements.first && elements.first.loc.line > left_paren.line
end

def on_begin(node)

def on_begin(node)
  check(node, node.children)
end

def on_method_def(_node, _method_name, args, _body)

def on_method_def(_node, _method_name, args, _body)
  check(args, args.children)
end

def on_send(node)

def on_send(node)
  _receiver, _method_name, *args = *node
  check(node, args)
end