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

Inherits:
Cop
  • Object
show all
Includes:
RangeHelp
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.'

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, #disable_uncorrectable, #duplicate_location?, #excluded_file?, #external_dependency_checksum, #find_location, #highlights, inherited, #initialize, #join_force?, lint?, match?, #message, #messages, #parse, qualified_cop_name, #reason_to_not_correct, #relevant_file?, #target_rails_version, #target_ruby_version

Methods included from AST::Sexp

#s

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 AutocorrectLogic

#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #correctable?, #disable_offense, #disable_uncorrectable?, #safe_autocorrect?, #support_autocorrect?

Methods included from IgnoredNode

#ignore_node, #ignored_node?, #part_of_ignored_node?

Methods included from Util

add_parentheses, args_begin, args_end, begins_its_line?, comment_line?, comment_lines?, 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

#autocorrect(node) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/rubocop/cop/lint/ensure_return.rb', line 48

def autocorrect(node)
  lambda do |corrector|
    if node.arguments?
      corrector.replace(node, node.source.gsub(/return\s*/, ''))
    else
      range = range_by_whole_lines(
        node.loc.expression, include_final_newline: true
      )
      corrector.remove(range)
    end
  end
end

#on_ensure(node) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
# File 'lib/rubocop/cop/lint/ensure_return.rb', line 36

def on_ensure(node)
  ensure_body = node.body

  return unless ensure_body

  ensure_body.each_node(:return) do |return_node|
    next if return_node.arguments.size >= 2

    add_offense(return_node, location: :keyword)
  end
end