lib/rubocop/cop/rspec/instance_variable.rb in rubocop-rspec-1.21.0 vs lib/rubocop/cop/rspec/instance_variable.rb in rubocop-rspec-1.22.0

- old
+ new

@@ -51,24 +51,33 @@ EXAMPLE_GROUP_METHODS = ExampleGroups::ALL + SharedGroups::ALL def_node_matcher :spec_group?, EXAMPLE_GROUP_METHODS.block_pattern + def_node_matcher :dynamic_class?, <<-PATTERN + (block (send (const nil? :Class) :new ...) ...) + PATTERN + def_node_search :ivar_usage, '$(ivar $_)' def_node_search :ivar_assigned?, '(ivasgn % ...)' def on_block(node) return unless spec_group?(node) ivar_usage(node) do |ivar, name| + return if inside_dynamic_class?(ivar) return if assignment_only? && !ivar_assigned?(node, name) add_offense(ivar, location: :expression) end end private + + def inside_dynamic_class?(node) + node.each_ancestor(:block).any? { |block| dynamic_class?(block) } + end def assignment_only? cop_config['AssignmentOnly'] end end