module RuboCop::Cop::MultilineLiteralBraceLayout

Common functionality for checking that the closing brace of a literal is symmetrical with respect to the opening brace and contained elements.

Public Instance Methods

autocorrect(node) click to toggle source
# File lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb, line 23
def autocorrect(node)
  if closing_brace_on_same_line?(node)
    lambda do |corrector|
      corrector.insert_before(node.loc.end, "\n".freeze)
    end
  else
    lambda do |corrector|
      corrector.remove(range_with_surrounding_space(node.loc.end,
                                                    :left))
      corrector.insert_after(children(node).last.source_range,
                             node.loc.end.source)
    end
  end
end
check_brace_layout(node) click to toggle source
# File lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb, line 8
def check_brace_layout(node)
  return unless node.loc.begin # Ignore implicit literals.
  return if children(node).empty? # Ignore empty literals.

  if opening_brace_on_same_line?(node)
    return if closing_brace_on_same_line?(node)

    add_offense(node, :expression, self.class::SAME_LINE_MESSAGE)
  else
    return unless closing_brace_on_same_line?(node)

    add_offense(node, :expression, self.class::NEW_LINE_MESSAGE)
  end
end

Private Instance Methods

children(node) click to toggle source
# File lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb, line 40
def children(node)
  node.children
end
closing_brace_on_same_line?(node) click to toggle source

This method depends on the fact that we have guarded against implicit and empty literals.

# File lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb, line 52
def closing_brace_on_same_line?(node)
  node.loc.end.line == children(node).last.loc.last_line
end
opening_brace_on_same_line?(node) click to toggle source

This method depends on the fact that we have guarded against implicit and empty literals.

# File lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb, line 46
def opening_brace_on_same_line?(node)
  node.loc.begin.line == children(node).first.loc.first_line
end