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