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