class RuboCop::Cop::Layout::SpaceBeforeBrackets

Checks for space between the name of a receiver and a left brackets.

@example

# bad
collection [index_or_key]

# good
collection[index_or_key]

Constants

MSG
RESTRICT_ON_SEND

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/cop/layout/space_before_brackets.rb, line 24
def on_send(node)
  return unless (first_argument = node.first_argument)

  begin_pos = first_argument.source_range.begin_pos
  return unless (range = offense_range(node, begin_pos))

  register_offense(range)
end

Private Instance Methods

dot_before_brackets?(node, receiver_end_pos, selector_begin_pos) click to toggle source
# File lib/rubocop/cop/layout/space_before_brackets.rb, line 48
def dot_before_brackets?(node, receiver_end_pos, selector_begin_pos)
  return false unless node.loc.respond_to?(:dot) && (dot = node.loc.dot)

  dot.begin_pos == receiver_end_pos && dot.end_pos == selector_begin_pos
end
offense_range(node, begin_pos) click to toggle source
# File lib/rubocop/cop/layout/space_before_brackets.rb, line 35
def offense_range(node, begin_pos)
  if reference_variable_with_brackets?(node)
    receiver_end_pos = node.receiver.source_range.end_pos
    selector_begin_pos = node.loc.selector.begin_pos
    return if receiver_end_pos >= selector_begin_pos
    return if dot_before_brackets?(node, receiver_end_pos, selector_begin_pos)

    range_between(receiver_end_pos, selector_begin_pos)
  elsif node.method?(:[]=)
    offense_range_for_assignment(node, begin_pos)
  end
end
offense_range_for_assignment(node, begin_pos) click to toggle source
# File lib/rubocop/cop/layout/space_before_brackets.rb, line 54
def offense_range_for_assignment(node, begin_pos)
  end_pos = node.receiver.source_range.end_pos

  return if begin_pos - end_pos == 1 ||
            (range = range_between(end_pos, begin_pos - 1)).source.start_with?('[')

  range
end
reference_variable_with_brackets?(node) click to toggle source
# File lib/rubocop/cop/layout/space_before_brackets.rb, line 67
def reference_variable_with_brackets?(node)
  node.receiver&.variable? && node.method?(:[]) && node.arguments.size == 1
end
register_offense(range) click to toggle source
# File lib/rubocop/cop/layout/space_before_brackets.rb, line 63
def register_offense(range)
  add_offense(range) { |corrector| corrector.remove(range) }
end