Class: RuboCop::Cop::RSpec::Focus

Inherits:
Base
  • Object
show all
Extended by:
AutoCorrector
Includes:
RangeHelp
Defined in:
lib/rubocop/cop/rspec/focus.rb

Overview

Checks if examples are focused.

This cop does not support autocorrection in some cases.

Examples:

# bad
describe MyClass, focus: true do
end

describe MyClass, :focus do
end

fdescribe MyClass do
end

# good
describe MyClass do
end

# bad
fdescribe 'test' do; end

# good
describe 'test' do; end

# bad
fdescribe 'test' do; end

# good
describe 'test' do; end

# bad (does not support autocorrection)
focus 'test' do; end

Constant Summary collapse

MSG =
'Focused spec found.'

Instance Method Summary collapse

Methods inherited from Base

inherited, #on_new_investigation

Methods included from RSpec::Language::NodePattern

#block_pattern, #numblock_pattern, #send_pattern

Methods included from RSpec::Language

#example?, #example_group?, #example_group_with_body?, #hook?, #include?, #let?, #rspec?, #shared_group?, #spec_group?, #subject?

Instance Method Details

#focusable_selector?(node) ⇒ Object



47
48
49
50
51
52
53
54
55
# File 'lib/rubocop/cop/rspec/focus.rb', line 47

def_node_matcher :focusable_selector?, <<-PATTERN
  {
    #ExampleGroups.regular
    #ExampleGroups.skipped
    #Examples.regular
    #Examples.skipped
    #Examples.pending
  }
PATTERN

#focused_block?(node) ⇒ Object



64
65
66
67
# File 'lib/rubocop/cop/rspec/focus.rb', line 64

def_node_matcher :focused_block?,
send_pattern(<<~PATTERN)
  {#ExampleGroups.focused #Examples.focused}
PATTERN

#metadata(node) ⇒ Object



58
59
60
61
# File 'lib/rubocop/cop/rspec/focus.rb', line 58

def_node_matcher :metadata, <<-PATTERN
  {(send #rspec? #focusable_selector? <$(sym :focus) ...>)
   (send #rspec? #focusable_selector? ... (hash <$(pair (sym :focus) true) ...>))}
PATTERN

#on_send(node) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
# File 'lib/rubocop/cop/rspec/focus.rb', line 69

def on_send(node)
  (node) do |focus|
    add_offense(focus) do |corrector|
      if focus.pair_type? || focus.str_type? || focus.sym_type?
        corrector.remove(with_surrounding(focus))
      elsif focus.send_type?
        correct_send(corrector, focus)
      end
    end
  end
end