class RuboCop::Cop::Layout::EmptyLinesAroundArguments

Checks if empty lines exist around the arguments of a method invocation.

@example

# bad
do_something(
  foo

)

process(bar,

        baz: qux,
        thud: fred)

some_method(

  [1,2,3],
  x: y
)

# good
do_something(
  foo
)

process(bar,
        baz: qux,
        thud: fred)

some_method(
  [1,2,3],
  x: y
)

Constants

MSG

Public Instance Methods

on_csend(node)
Alias for: on_send
on_send(node) click to toggle source
# File lib/rubocop/cop/layout/empty_lines_around_arguments.rb, line 47
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
Also aliased as: on_csend

Private Instance Methods

empty_lines(node) click to toggle source
# File lib/rubocop/cop/layout/empty_lines_around_arguments.rb, line 65
def empty_lines(node)
  lines = processed_lines(node)
  lines.select! { |code, _| code.empty? }
  lines.map { |_, line| line }
end
extra_lines(node) { |range| ... } click to toggle source
# File lib/rubocop/cop/layout/empty_lines_around_arguments.rb, line 71
def extra_lines(node)
  empty_lines(node).each do |line|
    range = source_range(processed_source.buffer, line, 0)
    yield(range)
  end
end
inner_lines(node) click to toggle source
# File lib/rubocop/cop/layout/empty_lines_around_arguments.rb, line 93
def inner_lines(node)
  [node.first_line + 1, node.last_line - 1]
end
line_numbers(node) click to toggle source
# File lib/rubocop/cop/layout/empty_lines_around_arguments.rb, line 84
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
outer_lines(node) click to toggle source
# File lib/rubocop/cop/layout/empty_lines_around_arguments.rb, line 97
def outer_lines(node)
  [node.first_line - 1, node.last_line + 1]
end
processed_lines(node) click to toggle source
# File lib/rubocop/cop/layout/empty_lines_around_arguments.rb, line 78
def processed_lines(node)
  line_numbers(node).each_with_object([]) do |num, array|
    array << [processed_source.lines[num - 1], num]
  end
end
receiver_and_method_call_on_different_lines?(node) click to toggle source
# File lib/rubocop/cop/layout/empty_lines_around_arguments.rb, line 61
def receiver_and_method_call_on_different_lines?(node)
  node.receiver && node.receiver.loc.last_line != node.loc.selector&.line
end