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

This cop 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

Constants included from Util

Util::LITERAL_REGEX

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

#add_global_offense, #add_offense, autocorrect_incompatible_with, badge, #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, joining_forces, lint?, match?, #message, #offenses, #on_investigation_end, #on_new_investigation, #on_other_file, #ready, #relevant_file?, support_autocorrect?, support_multiple_source?, #target_rails_version, #target_ruby_version

Methods included from AutocorrectLogic

#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #correctable?, #disable_uncorrectable?, #safe_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, indent, interpret_string_escapes, line_range, needs_escaping?, on_node, parentheses?, same_line?, to_string_literal, to_supported_styles, trim_string_interporation_escape_character

Methods included from PathUtil

absolute?, hidden_dir?, hidden_file?, hidden_file_in_not_hidden_dir?, match_path?, maybe_hidden_file?, relative_path, smart_path

Constructor Details

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

Instance Method Details

#on_case(node) ⇒ Object



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

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



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

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

#on_module(node) ⇒ Object



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

def on_module(node)
  check_other_alignment(node)
end

#on_until(node) ⇒ Object



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

def on_until(node)
  check_other_alignment(node)
end

#on_while(node) ⇒ Object



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

def on_while(node)
  check_other_alignment(node)
end