Class: RuboCop::Cop::Rails::Exit

Inherits:
Base
  • Object
show all
Includes:
ConfigurableEnforcedStyle
Defined in:
lib/rubocop/cop/rails/exit.rb

Overview

Enforces that ‘exit` calls are not used within a rails app. Valid options are instead to raise an error, break, return, or some other form of stopping execution of current request.

There are two obvious cases where ‘exit` is particularly harmful:

  • Usage in library code for your application. Even though Rails will

rescue from a ‘SystemExit` and continue on, unit testing that library code will result in specs exiting (potentially silently if `exit(0)` is used.)

  • Usage in application code outside of the web process could result in

the program exiting, which could result in the code failing to run and do its job.

Examples:

# bad
exit(0)

# good
raise 'a bad error has happened'

Constant Summary collapse

MSG =
'Do not use `exit` in Rails applications.'
RESTRICT_ON_SEND =
%i[exit exit!].freeze
EXPLICIT_RECEIVERS =
%i[Kernel Process].freeze

Instance Method Summary collapse

Instance Method Details

#on_send(node) ⇒ Object



33
34
35
# File 'lib/rubocop/cop/rails/exit.rb', line 33

def on_send(node)
  add_offense(node.loc.selector) if offending_node?(node)
end