class RuboCop::Cop::RSpec::HookArgument
Checks the arguments passed to `before`, `around`, and `after`.
This cop checks for consistent style when specifying RSpec
hooks which run for each example. There are three supported styles: “implicit”, “each”, and “example.” All styles have the same behavior.
@example when configuration is `EnforcedStyle: implicit`
# bad before(:each) do # ... end # bad before(:example) do # ... end # good before do # ... end
@example when configuration is `EnforcedStyle: each`
# bad before(:example) do # ... end # good before do # ... end # good before(:each) do # ... end
@example when configuration is `EnforcedStyle: example`
# bad before(:each) do # ... end # bad before do # ... end # good before(:example) do # ... end
Constants
- EXPLICIT_MSG
- HOOKS
- IMPLICIT_MSG
Public Instance Methods
autocorrect(node)
click to toggle source
# File lib/rubocop/cop/rspec/hook_argument.rb, line 89 def autocorrect(node) scope = implicit_style? ? '' : "(#{style.inspect})" lambda do |corrector| corrector.replace(argument_range(node), scope) end end
on_block(node)
click to toggle source
# File lib/rubocop/cop/rspec/hook_argument.rb, line 75 def on_block(node) hook(node) do |method_send, scope_name| return correct_style_detected if scope_name.equal?(style) return check_implicit(method_send) unless scope_name style_detected(scope_name) add_offense( method_send, location: :expression, message: explicit_message(scope_name) ) end end
Private Instance Methods
argument_range(send_node)
click to toggle source
# File lib/rubocop/cop/rspec/hook_argument.rb, line 126 def argument_range(send_node) send_node.loc.selector.end.with( end_pos: send_node.loc.expression.end_pos ) end
check_implicit(method_send)
click to toggle source
# File lib/rubocop/cop/rspec/hook_argument.rb, line 99 def check_implicit(method_send) style_detected(:implicit) return if implicit_style? add_offense( method_send, location: :selector, message: format(EXPLICIT_MSG, scope: style) ) end
explicit_message(scope)
click to toggle source
# File lib/rubocop/cop/rspec/hook_argument.rb, line 110 def explicit_message(scope) if implicit_style? format(IMPLICIT_MSG, scope: scope) else format(EXPLICIT_MSG, scope: style) end end
hook(node, &block)
click to toggle source
# File lib/rubocop/cop/rspec/hook_argument.rb, line 122 def hook(node, &block) scoped_hook(node, &block) || unscoped_hook(node, &block) end
implicit_style?()
click to toggle source
# File lib/rubocop/cop/rspec/hook_argument.rb, line 118 def implicit_style? style.equal?(:implicit) end