module RuboCop::Cop::FirstElementLineBreak

Common functionality for checking for a line break before the first element in a multi-line collection.

Public Instance Methods

autocorrect(node) click to toggle source
# File lib/rubocop/cop/mixin/first_element_line_break.rb, line 7
def autocorrect(node)
  ->(corrector) { corrector.insert_before(node.source_range, "\n") }
end

Private Instance Methods

check_children_line_break(node, children, start = node) click to toggle source
# File lib/rubocop/cop/mixin/first_element_line_break.rb, line 26
def check_children_line_break(node, children, start = node)
  return if children.size < 2

  line = start.loc.line

  min = first_by_line(children)
  return if line != min.loc.first_line

  max = last_by_line(children)
  return if line == max.loc.last_line

  add_offense(min)
end
check_method_line_break(node, children) click to toggle source
# File lib/rubocop/cop/mixin/first_element_line_break.rb, line 13
def check_method_line_break(node, children)
  return if children.empty?

  return unless method_uses_parens?(node, children.first)

  check_children_line_break(node, children)
end
first_by_line(nodes) click to toggle source
# File lib/rubocop/cop/mixin/first_element_line_break.rb, line 40
def first_by_line(nodes)
  nodes.min_by { |n| n.loc.first_line }
end
last_by_line(nodes) click to toggle source
# File lib/rubocop/cop/mixin/first_element_line_break.rb, line 44
def last_by_line(nodes)
  nodes.max_by { |n| n.loc.last_line }
end
method_uses_parens?(node, limit) click to toggle source
# File lib/rubocop/cop/mixin/first_element_line_break.rb, line 21
def method_uses_parens?(node, limit)
  source = node.source_range.source_line[0...limit.loc.column]
  source =~ /\s*\(\s*$/
end