From 8bbf5f05a6d6d1b2da9f143cb6a7b11ab501b3b8 Mon Sep 17 00:00:00 2001 From: Phil Pirozhkov Date: Wed, 24 Jul 2019 10:57:40 +0300 Subject: [PATCH] Fix a case for DescribedClass cop If a local variable was part of the described class's namespace, the cop was failing. fixes #790 --- CHANGELOG.md | 2 ++ lib/rubocop/cop/rspec/described_class.rb | 6 +++--- spec/rubocop/cop/rspec/described_class_spec.rb | 12 ++++++++++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fad5060f..7213c62ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## Master (Unreleased) +* Fix `RSpec/DescribedClass`'s error when a local variable is part of the namespace. ([@pirj][]) + ## 1.34.0 (2019-07-23) * Remove `AggregateFailuresByDefault` config option of `RSpec/MultipleExpectations`. ([@pirj][]) diff --git a/lib/rubocop/cop/rspec/described_class.rb b/lib/rubocop/cop/rspec/described_class.rb index 712d0d314..4433509e7 100644 --- a/lib/rubocop/cop/rspec/described_class.rb +++ b/lib/rubocop/cop/rspec/described_class.rb @@ -166,10 +166,10 @@ def const_name(node) # rubocop:enable InternalAffairs/NodeDestructuring if !namespace [name] - elsif namespace.cbase_type? - [nil, name] - else + elsif namespace.const_type? [*const_name(namespace), name] + elsif namespace.lvar_type? || namespace.cbase_type? + [nil, name] end end diff --git a/spec/rubocop/cop/rspec/described_class_spec.rb b/spec/rubocop/cop/rspec/described_class_spec.rb index 92a46e47d..aaa2fa100 100644 --- a/spec/rubocop/cop/rspec/described_class_spec.rb +++ b/spec/rubocop/cop/rspec/described_class_spec.rb @@ -255,6 +255,18 @@ module D end RUBY end + + it 'ignores if a local variable is part of the namespace' do + expect_no_offenses(<<-RUBY) + describe Broken do + [Foo, Bar].each do |klass| + describe klass::Baz.name do + it { } + end + end + end + RUBY + end end context 'when EnforcedStyle is :explicit' do