lib/rubocop/cop/layout/space_before_brackets.rb in rubocop-1.7.0 vs lib/rubocop/cop/layout/space_before_brackets.rb in rubocop-1.8.0

- old
+ new

@@ -4,14 +4,10 @@ module Cop module Layout # Checks for space between the name of a receiver and a left # brackets. # - # This cop is marked as unsafe because it can occur false positives - # for `do_something [this_is_an_array_literal_argument]` that take - # an array without parentheses as an argument. - # # @example # # # bad # collection [index_or_key] # @@ -23,25 +19,27 @@ extend AutoCorrector MSG = 'Remove the space before the opening brackets.' def on_send(node) - return if node.parenthesized? || node.parent&.send_type? return unless (first_argument = node.first_argument) begin_pos = first_argument.source_range.begin_pos + return unless (range = offense_range(node, begin_pos)) - return unless (range = offense_range(node, first_argument, begin_pos)) - register_offense(range) end private - def offense_range(node, first_argument, begin_pos) - if space_before_brackets?(node, first_argument) - range_between(node.loc.selector.end_pos, begin_pos) + 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 + + range_between(receiver_end_pos, selector_begin_pos) elsif node.method?(:[]=) end_pos = node.receiver.source_range.end_pos return if begin_pos - end_pos == 1 @@ -53,11 +51,11 @@ add_offense(range) do |corrector| corrector.remove(range) end end - def space_before_brackets?(node, first_argument) - node.receiver.nil? && first_argument.array_type? && node.arguments.size == 1 + def reference_variable_with_brackets?(node) + node.receiver&.variable? && node.method?(:[]) && node.arguments.size == 1 end end end end end