Class: RuboCop::Cop::RSpec::InstanceVariable
- Includes:
- TopLevelGroup
- Defined in:
- lib/rubocop/cop/rspec/instance_variable.rb
Overview
Checks for instance variable usage in specs.
This cop can be configured with the option ‘AssignmentOnly` which will configure the cop to only register offenses on instance variable usage if the instance variable is also assigned within the spec
Constant Summary collapse
- MSG =
'Avoid instance variables - use let, ' \ 'a method call, or a local variable (if possible).'
Instance Method Summary collapse
- #custom_matcher?(node) ⇒ Object
- #dynamic_class?(node) ⇒ Object
- #ivar_assigned?(node) ⇒ Object
- #ivar_usage(node) ⇒ Object
- #on_top_level_group(node) ⇒ Object
Methods included from TopLevelGroup
#on_new_investigation, #top_level_groups
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
#custom_matcher?(node) ⇒ Object
60 61 62 63 64 65 |
# File 'lib/rubocop/cop/rspec/instance_variable.rb', line 60 def_node_matcher :custom_matcher?, <<~PATTERN (block { (send nil? :matcher sym) (send (const (const nil? :RSpec) :Matchers) :define sym) } ...) PATTERN |
#dynamic_class?(node) ⇒ Object
55 56 57 |
# File 'lib/rubocop/cop/rspec/instance_variable.rb', line 55 def_node_matcher :dynamic_class?, <<~PATTERN (block (send (const nil? :Class) :new ...) ...) PATTERN |
#ivar_assigned?(node) ⇒ Object
71 |
# File 'lib/rubocop/cop/rspec/instance_variable.rb', line 71 def_node_search :ivar_assigned?, '(ivasgn % ...)' |
#ivar_usage(node) ⇒ Object
68 |
# File 'lib/rubocop/cop/rspec/instance_variable.rb', line 68 def_node_search :ivar_usage, '$(ivar $_)' |
#on_top_level_group(node) ⇒ Object
73 74 75 76 77 78 79 80 |
# File 'lib/rubocop/cop/rspec/instance_variable.rb', line 73 def on_top_level_group(node) ivar_usage(node) do |ivar, name| next if valid_usage?(ivar) next if assignment_only? && !ivar_assigned?(node, name) add_offense(ivar) end end |