Class: RuboCop::Cop::Layout::EndAlignment

Inherits:
Base
  • Object
show all
Extended by:
AutoCorrector
Includes:
CheckAssignment, EndKeywordAlignment, RangeHelp
Defined in:
lib/rubocop/cop/layout/end_alignment.rb

Overview

Checks whether the end keywords are aligned properly.

Three modes are supported through the EnforcedStyleAlignWith configuration parameter:

If it’s set to keyword (which is the default), the end shall be aligned with the start of the keyword (if, class, etc.).

If it’s set to variable the end shall be aligned with the left-hand-side of the variable assignment, if there is one.

If it’s set to start_of_line, the end shall be aligned with the start of the line where the matching keyword appears.

This Layout/EndAlignment cop aligns with keywords (e.g. if, while, case) by default. On the other hand, Layout/BeginEndAlignment cop aligns with EnforcedStyleAlignWith: start_of_line by default due to ||= begin tends to align with the start of the line. These style can be configured by each cop.

Examples:

EnforcedStyleAlignWith: keyword (default)

# bad

variable = if true
    end

# good

variable = if true
           end

variable =
  if true
  end

EnforcedStyleAlignWith: variable

# bad

variable = if true
    end

# good

variable = if true
end

variable =
  if true
  end

EnforcedStyleAlignWith: start_of_line

# bad

variable = if true
    end

puts(if true
     end)

# good

variable = if true
end

puts(if true
end)

variable =
  if true
  end

Constant Summary

Constants included from EndKeywordAlignment

EndKeywordAlignment::MSG

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 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 included from CheckAssignment

extract_rhs, #on_lvasgn, #on_send

Methods inherited from Base

#active_support_extensions_enabled?, #add_global_offense, #add_offense, autocorrect_incompatible_with, badge, #begin_investigation, callbacks_needed, #callbacks_needed, #config_to_allow_offenses, #config_to_allow_offenses=, #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, #ready, #relevant_file?, support_autocorrect?, support_multiple_source?, #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_case(node) ⇒ Object Also known as: on_case_match



105
106
107
108
109
110
111
# File 'lib/rubocop/cop/layout/end_alignment.rb', line 105

def on_case(node)
  if node.argument?
    check_asgn_alignment(node.parent, node)
  else
    check_other_alignment(node)
  end
end

#on_class(node) ⇒ Object



81
82
83
# File 'lib/rubocop/cop/layout/end_alignment.rb', line 81

def on_class(node)
  check_other_alignment(node)
end

#on_if(node) ⇒ Object



93
94
95
# File 'lib/rubocop/cop/layout/end_alignment.rb', line 93

def on_if(node)
  check_other_alignment(node) unless node.ternary?
end

#on_module(node) ⇒ Object



89
90
91
# File 'lib/rubocop/cop/layout/end_alignment.rb', line 89

def on_module(node)
  check_other_alignment(node)
end

#on_sclass(node) ⇒ Object



85
86
87
# File 'lib/rubocop/cop/layout/end_alignment.rb', line 85

def on_sclass(node)
  check_other_alignment(node)
end

#on_until(node) ⇒ Object



101
102
103
# File 'lib/rubocop/cop/layout/end_alignment.rb', line 101

def on_until(node)
  check_other_alignment(node)
end

#on_while(node) ⇒ Object



97
98
99
# File 'lib/rubocop/cop/layout/end_alignment.rb', line 97

def on_while(node)
  check_other_alignment(node)
end