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
shared_examples 'test', focus: true do; end

# good
shared_examples 'test' do; end

# bad
shared_context 'test', focus: true do; end

# good
shared_context '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

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

Instance Method Details

#focusable_selector?(node) ⇒ Object



53
54
55
56
57
58
59
60
61
62
# File 'lib/rubocop/cop/rspec/focus.rb', line 53

def_node_matcher :focusable_selector?, "{\n  #ExampleGroups.regular\n  #ExampleGroups.skipped\n  #Examples.regular\n  #Examples.skipped\n  #Examples.pending\n  #SharedGroups.all\n}\n"

#focused_block?(node) ⇒ Object



71
72
73
# File 'lib/rubocop/cop/rspec/focus.rb', line 71

def_node_matcher :focused_block?, "(send #rspec? {#ExampleGroups.focused #Examples.focused} ...)\n"

#metadata(node) ⇒ Object



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

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

#on_send(node) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
# File 'lib/rubocop/cop/rspec/focus.rb', line 75

def on_send(node)
  return if node.chained? || node.each_ancestor(:any_def).any?

  if focused_block?(node)
    on_focused_block(node)
  else
    (node) do |focus|
      (focus)
    end
  end
end