class RuboCop::Cop::Layout::EmptyLinesAroundArguments


)
x: y<br>,
some_method(
thud: fred)
baz: qux,
process(bar,
)
foo
do_something(
# good
)
x: y<br>,
some_method(
thud: fred)
baz: qux,
process(bar,
)
foo
do_something(
# bad
@example
of a method invocation.
Checks if empty lines exist around the arguments

def empty_lines(node)

def empty_lines(node)
  lines = processed_lines(node)
  lines.select! { |code, _| code.empty? }
  lines.map { |_, line| line }
end

def extra_lines(node)

def extra_lines(node)
  empty_lines(node).each do |line|
    range = source_range(processed_source.buffer, line, 0)
    yield(range)
  end
end

def inner_lines(node)

def inner_lines(node)
  [node.first_line + 1, node.last_line - 1]
end

def line_numbers(node)

def line_numbers(node)
  inner_lines = []
  line_nums = node.arguments.each_with_object([]) do |arg_node, lines|
    lines << outer_lines(arg_node)
    inner_lines << inner_lines(arg_node) if arg_node.multiline?
  end
  line_nums.flatten.uniq - inner_lines.flatten - outer_lines(node)
end

def on_send(node)

def on_send(node)
  return if node.single_line? || node.arguments.empty? ||
            receiver_and_method_call_on_different_lines?(node)
  extra_lines(node) do |range|
    add_offense(range) do |corrector|
      corrector.remove(range)
    end
  end
end

def outer_lines(node)

def outer_lines(node)
  [node.first_line - 1, node.last_line + 1]
end

def processed_lines(node)

def processed_lines(node)
  line_numbers(node).each_with_object([]) do |num, array|
    array << [processed_source.lines[num - 1], num]
  end
end

def receiver_and_method_call_on_different_lines?(node)

def receiver_and_method_call_on_different_lines?(node)
  node.receiver && node.receiver.loc.last_line != node.loc.selector&.line
end