class RuboCop::Cop::Rails::Exit
raise ‘a bad error has happened’
# good
exit(0)
# bad
@example
do its job.
the program exiting, which could result in the code failing to run and
* Usage in application code outside of the web process could result in
is used.)
code will result in specs exiting (potentially silently if ‘exit(0)`
rescue from a `SystemExit` and continue on, unit testing that library
* Usage in library code for your application. Even though Rails will
There are two obvious cases where `exit` is particularly harmful:
other form of stopping execution of current request.
Valid options are instead to raise an error, break, return, or some
Enforces that `exit` calls are not used within a rails app.
def offending_node?(node)
def offending_node?(node) right_argument_count?(node.arguments) && right_receiver?(node.receiver) end
def on_send(node)
def on_send(node) add_offense(node.loc.selector) if offending_node?(node) end
def right_argument_count?(arg_nodes)
More than 1 argument likely means it is a different
def right_argument_count?(arg_nodes) arg_nodes.size <= 1 end
def right_receiver?(receiver_node)
Only register if exit is being called explicitly on `Kernel`,
def right_receiver?(receiver_node) return true unless receiver_node _a, receiver_node_class, _c = *receiver_node EXPLICIT_RECEIVERS.include?(receiver_node_class) end