Skip to content

Commit 9590e21

Browse files
committed
Make RSpec Hooks fully configurable
1 parent 64ed0b4 commit 9590e21

File tree

88 files changed

+74
-174
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

88 files changed

+74
-174
lines changed

config/default.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,15 @@ AllCops:
44
Patterns:
55
- _spec.rb
66
- "(?:^|/)spec/"
7+
Language:
8+
Hooks:
9+
- prepend_before
10+
- before
11+
- append_before
12+
- around
13+
- prepend_after
14+
- after
15+
- append_after
716
RSpec/FactoryBot:
817
Patterns:
918
- spec/factories.rb

lib/rubocop/rspec/language.rb

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -67,25 +67,6 @@ def node_pattern
6767
attr_reader :selectors
6868
end
6969

70-
# Built in RSpec selectors
71-
module BuiltIn
72-
LANGUAGE = {
73-
'Hooks' => %i[
74-
prepend_before
75-
before
76-
append_before
77-
around
78-
prepend_after
79-
after
80-
append_after
81-
]
82-
}.freeze
83-
84-
def self.language_elements_for(*keys)
85-
LANGUAGE.dig(*keys) || []
86-
end
87-
end
88-
8970
module ExampleGroups
9071
GROUPS = SelectorSet.new(%i[describe context feature example_group])
9172
SKIPPED = SelectorSet.new(%i[xdescribe xcontext xfeature])

lib/rubocop/rspec/language/node_pattern.rb

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -43,32 +43,26 @@ def rspec_all(keyword)
4343

4444
# TODO: Fully replace selectors with sets
4545
def hooks_set
46-
@hooks_set ||= Set.new(hook_selectors.send(:selectors))
46+
@hooks_set ||= Set.new(rspec_language_config('Hooks'))
4747
end
4848

4949
def all_set
5050
@all_set ||= Set.new(all_selectors.send(:selectors))
5151
end
5252

53-
def hook_selectors
54-
selectors('Hooks')
55-
end
56-
5753
def all_selectors
58-
ExampleGroups::ALL +
59-
SharedGroups::ALL +
60-
Examples::ALL +
61-
hook_selectors +
62-
Helpers::ALL +
63-
Subject::ALL +
64-
Expectations::ALL +
54+
ExampleGroups::ALL +
55+
SharedGroups::ALL +
56+
Examples::ALL +
57+
selectors('Hooks') +
58+
Helpers::ALL +
59+
Subject::ALL +
60+
Expectations::ALL +
6561
Runners::ALL
6662
end
6763

6864
def selectors(*keys)
69-
SelectorSet.new(
70-
BuiltIn.language_elements_for(*keys) + rspec_language_config(*keys)
71-
)
65+
SelectorSet.new(rspec_language_config(*keys))
7266
end
7367
end
7468
end

spec/rubocop/cop/rspec/align_left_let_brace_spec.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
# frozen_string_literal: true
22

33
RSpec.describe RuboCop::Cop::RSpec::AlignLeftLetBrace do
4-
subject(:cop) { described_class.new }
5-
64
# rubocop:disable RSpec/ExampleLength
75
it 'registers offense for unaligned braces' do
86
expect_offense(<<-RUBY)

spec/rubocop/cop/rspec/align_right_let_brace_spec.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
# frozen_string_literal: true
22

33
RSpec.describe RuboCop::Cop::RSpec::AlignRightLetBrace do
4-
subject(:cop) { described_class.new }
5-
64
# rubocop:disable RSpec/ExampleLength
75
it 'registers offense for unaligned braces' do
86
expect_offense(<<-RUBY)

spec/rubocop/cop/rspec/any_instance_spec.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
# frozen_string_literal: true
22

33
RSpec.describe RuboCop::Cop::RSpec::AnyInstance do
4-
subject(:cop) { described_class.new }
5-
64
it 'finds `allow_any_instance_of` instead of an instance double' do
75
expect_offense(<<-RUBY)
86
before do

spec/rubocop/cop/rspec/around_block_spec.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
# frozen_string_literal: true
22

33
RSpec.describe RuboCop::Cop::RSpec::AroundBlock do
4-
subject(:cop) { described_class.new }
5-
64
context 'when no value is yielded' do
75
it 'registers an offense' do
86
expect_offense(<<-RUBY)

spec/rubocop/cop/rspec/be_eql_spec.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
# frozen_string_literal: true
22

33
RSpec.describe RuboCop::Cop::RSpec::BeEql do
4-
subject(:cop) { described_class.new }
5-
64
it 'registers an offense for `eql` when argument is a boolean' do
75
expect_offense(<<-RUBY)
86
it { expect(foo).to eql(true) }

spec/rubocop/cop/rspec/be_spec.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
# frozen_string_literal: true
22

33
RSpec.describe RuboCop::Cop::RSpec::Be do
4-
subject(:cop) { described_class.new }
5-
64
it 'registers an offense for `be` without an argument' do
75
expect_offense(<<-RUBY)
86
it { expect(foo).to be }

spec/rubocop/cop/rspec/before_after_all_spec.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
# frozen_string_literal: true
22

33
RSpec.describe RuboCop::Cop::RSpec::BeforeAfterAll do
4-
subject(:cop) { described_class.new }
5-
64
def message(hook)
75
"Beware of using `#{hook}` as it may cause state to leak between tests. "\
86
'If you are using `rspec-rails`, and `use_transactional_fixtures` is '\

0 commit comments

Comments
 (0)