Class: RuboCop::Cop::Style::EndlessMethod

Inherits:
Base
  • Object
show all
Extended by:
AutoCorrector, TargetRubyVersion
Includes:
ConfigurableEnforcedStyle, EndlessMethodRewriter
Defined in:
lib/rubocop/cop/style/endless_method.rb

Overview

Checks for endless methods.

It can enforce endless method definitions whenever possible or with single line methods. It can also disallow multiline endless method definitions or all endless definitions.

‘require_single_line` style enforces endless method definitions for single line methods. `require_always` style enforces endless method definitions for single statement methods.

Other method definition types are not considered by this cop.

The supported styles are:

  • allow_single_line (default) - only single line endless method definitions are allowed.

  • allow_always - all endless method definitions are allowed.

  • disallow - all endless method definitions are disallowed.

  • require_single_line - endless method definitions are required for single line methods.

  • require_always - all endless method definitions are required.

NOTE: Incorrect endless method definitions will always be corrected to a multi-line definition.

Examples:

EnforcedStyle: allow_single_line (default)

# bad, multi-line endless method
def my_method = x.foo
                 .bar
                 .baz

# good
def my_method
  x
end

# good
def my_method = x

# good
def my_method
  x.foo
   .bar
   .baz
end

EnforcedStyle: allow_always

# good
def my_method
  x
end

# good
def my_method = x

# good
def my_method = x.foo
                 .bar
                 .baz

# good
def my_method
  x.foo
   .bar
   .baz
end

EnforcedStyle: disallow

# bad
def my_method = x

# bad
def my_method = x.foo
                 .bar
                 .baz

# good
def my_method
  x
end

# good
def my_method
  x.foo
   .bar
   .baz
end

EnforcedStyle: require_single_line

# bad
def my_method
  x
end

# bad
def my_method = x.foo
                 .bar
                 .baz

# good
def my_method = x

# good
def my_method
  x.foo
   .bar
   .baz
end

EnforcedStyle: require_always

# bad
def my_method
  x
end

# bad
def my_method
  x.foo
   .bar
   .baz
end

# good
def my_method = x

# good
def my_method = x.foo
                 .bar
                 .baz

Constant Summary collapse

CORRECTION_STYLES =
%w[multiline single_line].freeze
MSG =
'Avoid endless method definitions.'
MSG_MULTI_LINE =
'Avoid endless method definitions with multiple lines.'
MSG_REQUIRE_SINGLE =
'Use endless method definitions for single line methods.'
MSG_REQUIRE_ALWAYS =
'Use endless method definitions.'

Constants inherited from Base

Base::RESTRICT_ON_SEND

Instance Attribute Summary

Attributes inherited from Base

#config, #processed_source

Instance Method Summary collapse

Methods included from TargetRubyVersion

maximum_target_ruby_version, minimum_target_ruby_version, required_maximum_ruby_version, required_minimum_ruby_version, support_target_ruby_version?

Methods included from AutoCorrector

support_autocorrect?

Methods included from ConfigurableEnforcedStyle

#alternative_style, #alternative_styles, #ambiguous_style_detected, #correct_style_detected, #detected_style, #detected_style=, #no_acceptable_style!, #no_acceptable_style?, #opposite_style_detected, #style, #style_configured?, #style_detected, #style_parameter_name, #supported_styles, #unexpected_style_detected

Methods inherited from Base

#active_support_extensions_enabled?, #add_global_offense, #add_offense, #always_autocorrect?, autocorrect_incompatible_with, badge, #begin_investigation, #callbacks_needed, callbacks_needed, #config_to_allow_offenses, #config_to_allow_offenses=, #contextual_autocorrect?, #cop_config, #cop_name, cop_name, department, documentation_url, exclude_from_registry, #excluded_file?, #external_dependency_checksum, inherited, #initialize, #inspect, joining_forces, lint?, match?, #message, #offenses, #on_investigation_end, #on_new_investigation, #on_other_file, #parse, #parser_engine, #ready, #relevant_file?, requires_gem, #string_literals_frozen_by_default?, support_autocorrect?, support_multiple_source?, #target_gem_version, #target_rails_version, #target_ruby_version

Methods included from ExcludeLimit

#exclude_limit

Methods included from AutocorrectLogic

#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #autocorrect_with_disable_uncorrectable?, #correctable?, #disable_uncorrectable?, #safe_autocorrect?

Methods included from IgnoredNode

#ignore_node, #ignored_node?, #part_of_ignored_node?

Methods included from Util

silence_warnings

Constructor Details

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

Instance Method Details

#on_def(node) ⇒ Object


146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/rubocop/cop/style/endless_method.rb', line 146

def on_def(node)
  return if node.assignment_method?

  case style
  when :allow_single_line, :allow_always
    handle_allow_style(node)
  when :disallow
    handle_disallow_style(node)
  when :require_single_line
    handle_require_single_line_style(node)
  when :require_always
    handle_require_always_style(node)
  end
end