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. Layout/DefEndAlignment cop also aligns with `EnforcedStyleAlignWith: start_of_line` by default. 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 RangeHelp

RangeHelp::BYTE_ORDER_MARK, RangeHelp::NOT_GIVEN

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, #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_case(node) ⇒ Object Also known as: on_case_match



111
112
113
114
115
116
117
# File 'lib/rubocop/cop/layout/end_alignment.rb', line 111

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

#on_class(node) ⇒ Object



83
84
85
# File 'lib/rubocop/cop/layout/end_alignment.rb', line 83

def on_class(node)
  check_other_alignment(node)
end

#on_if(node) ⇒ Object



99
100
101
# File 'lib/rubocop/cop/layout/end_alignment.rb', line 99

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

#on_module(node) ⇒ Object



95
96
97
# File 'lib/rubocop/cop/layout/end_alignment.rb', line 95

def on_module(node)
  check_other_alignment(node)
end

#on_sclass(node) ⇒ Object



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

def on_sclass(node)
  if node.parent&.assignment?
    check_asgn_alignment(node.parent, node)
  else
    check_other_alignment(node)
  end
end

#on_until(node) ⇒ Object



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

def on_until(node)
  check_other_alignment(node)
end

#on_while(node) ⇒ Object



103
104
105
# File 'lib/rubocop/cop/layout/end_alignment.rb', line 103

def on_while(node)
  check_other_alignment(node)
end