Class: RuboCop::Cop::Lint::EnsureReturn

Inherits:
Cop
  • Object
show all
Defined in:
lib/rubocop/cop/lint/ensure_return.rb

Overview

This cop checks for return from an ensure block. Explicit return from an ensure block alters the control flow as the return will take precedence over any exception being raised, and the exception will be silently thrown away as if it were rescued.

Examples:


# bad

begin
  do_something
ensure
  do_something_else
  return
end

# good

begin
  do_something
ensure
  do_something_else
end

Constant Summary collapse

MSG =
'Do not return from an `ensure` block.'.freeze

Constants included from Util

Util::LITERAL_REGEX

Instance Attribute Summary

Attributes inherited from Cop

#config, #corrections, #offenses, #processed_source

Instance Method Summary collapse

Methods inherited from Cop

#add_offense, all, autocorrect_incompatible_with, badge, #config_to_allow_offenses, #config_to_allow_offenses=, #cop_config, cop_name, #cop_name, #correct, department, #duplicate_location?, #excluded_file?, #find_location, #highlights, inherited, #initialize, #join_force?, lint?, match?, #message, #messages, non_rails, #parse, qualified_cop_name, #relevant_file?, #target_rails_version, #target_ruby_version

Methods included from NodePattern::Macros

#def_node_matcher, #def_node_search, #node_search, #node_search_all, #node_search_body, #node_search_first

Methods included from AST::Sexp

#s

Methods included from AutocorrectLogic

#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #support_autocorrect?

Methods included from IgnoredNode

#ignore_node, #ignored_node?, #part_of_ignored_node?

Methods included from Util

begins_its_line?, comment_line?, double_quotes_required?, escape_string, first_part_of_call_chain, interpret_string_escapes, line_range, needs_escaping?, on_node, parentheses?, same_line?, to_string_literal, to_supported_styles, tokens, trim_string_interporation_escape_character

Methods included from PathUtil

absolute?, chdir, hidden_dir?, hidden_file_in_not_hidden_dir?, match_path?, pwd, relative_path, reset_pwd, smart_path

Constructor Details

This class inherits a constructor from RuboCop::Cop::Cop

Instance Method Details

#on_ensure(node) ⇒ Object



34
35
36
37
38
39
40
41
42
# File 'lib/rubocop/cop/lint/ensure_return.rb', line 34

def on_ensure(node)
  ensure_body = node.body

  return unless ensure_body

  ensure_body.each_node(:return) do |return_node|
    add_offense(return_node)
  end
end