class RuboCop::Cop::RSpec::HookArgument
end
# …
before(:example) do
# good
end
# …
before do
# bad
end
# …
before(:each) do
# bad
@example ‘EnforcedStyle: example`
end
# …
before(:each) do
# good
end
# …
before do
# bad
end
# …
before(:example) do
# bad
@example `EnforcedStyle: each`
end
# …
before do
# good
end
# …
before(:example) do
# bad
end
# …
before(:each) do
# bad
@example `EnforcedStyle: implicit` (default)
the same behavior.
styles: “implicit”, “each”, and “example.” All styles have
hooks which run for each example. There are three supported
This cop checks for consistent style when specifying RSpec
Checks the arguments passed to `before`, `around`, and `after`.
def autocorrect(corrector, _node, method_send)
def autocorrect(corrector, _node, method_send) scope = implicit_style? ? '' : "(#{style.inspect})" corrector.replace( LocationHelp.arguments_with_whitespace(method_send), scope ) end
def check_implicit(method_send)
def check_implicit(method_send) style_detected(:implicit) return if implicit_style? msg = explicit_message(nil) add_offense(method_send.loc.selector, message: msg) do |corrector| scope = "(#{style.inspect})" corrector.replace( LocationHelp.arguments_with_whitespace(method_send), scope ) end end
def explicit_message(scope)
def explicit_message(scope) if implicit_style? format(IMPLICIT_MSG, scope: scope) else format(EXPLICIT_MSG, scope: style) end end
def hook(node, &block)
def hook(node, &block) scoped_hook(node, &block) || unscoped_hook(node, &block) end
def implicit_style?
def implicit_style? style.equal?(:implicit) end
def on_block(node)
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) msg = explicit_message(scope_name) add_offense(method_send, message: msg) do |corrector| autocorrect(corrector, node, method_send) end end end