Class: RuboCop::Cop::Lint::EndAlignment

Inherits:
Cop
  • Object
show all
Includes:
CheckAssignment, EndKeywordAlignment
Defined in:
lib/rubocop/cop/lint/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.

Examples:

EnforcedStyleAlignWith: keyword (default)

# bad

variable = if true
    end

# good

variable = if true
           end

EnforcedStyleAlignWith: variable

# bad

variable = if true
    end

# good

variable = if true
end

EnforcedStyleAlignWith: start_of_line

# bad

variable = if true
    end

# good

puts(if true
end)

Constant Summary

Constants included from EndKeywordAlignment

EndKeywordAlignment::MSG

Constants included from Util

Util::ASGN_NODES, Util::BYTE_ORDER_MARK, Util::CONDITIONAL_NODES, Util::EQUALS_ASGN_NODES, Util::LITERAL_REGEX, Util::LOGICAL_OPERATOR_NODES, Util::MODIFIER_NODES, Util::OPERATOR_METHODS, Util::SHORTHAND_ASGN_NODES

Instance Attribute Summary

Attributes inherited from Cop

#config, #corrections, #offenses, #processed_source

Instance Method Summary collapse

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_detected, #style_parameter_name, #supported_styles, #unexpected_style_detected

Methods included from CheckAssignment

extract_rhs, #on_send

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, #duplicate_location?, #excluded_file?, #find_location, #highlights, inherited, #initialize, #join_force?, lint?, match?, #message, #messages, non_rails, #parse, qualified_cop_name, #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?, #support_autocorrect?

Methods included from IgnoredNode

#ignore_node, #ignored_node?, #part_of_ignored_node?

Methods included from Util

begins_its_line?, comment_line?, double_quotes_required?, effective_column, ends_its_line?, escape_string, first_part_of_call_chain, interpret_string_escapes, line_range, needs_escaping?, on_node, operator?, parentheses?, parenthesized_call?, precede?, range_between, range_by_whole_lines, range_with_surrounding_comma, range_with_surrounding_space, same_line?, source_range, strip_quotes, stripped_source_upto, symbol_without_quote?, to_string_literal, to_supported_styles, to_symbol_literal, within_node?

Methods included from PathUtil

absolute?, find_file_upwards, 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



84
85
86
87
88
# File 'lib/rubocop/cop/lint/end_alignment.rb', line 84

def autocorrect(node)
  AlignmentCorrector.align_end(processed_source,
                               node,
                               alignment_node(node))
end

#on_case(node) ⇒ Object



76
77
78
79
80
81
82
# File 'lib/rubocop/cop/lint/end_alignment.rb', line 76

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

#on_class(node) ⇒ Object



56
57
58
# File 'lib/rubocop/cop/lint/end_alignment.rb', line 56

def on_class(node)
  check_other_alignment(node)
end

#on_if(node) ⇒ Object



64
65
66
# File 'lib/rubocop/cop/lint/end_alignment.rb', line 64

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

#on_module(node) ⇒ Object



60
61
62
# File 'lib/rubocop/cop/lint/end_alignment.rb', line 60

def on_module(node)
  check_other_alignment(node)
end

#on_until(node) ⇒ Object



72
73
74
# File 'lib/rubocop/cop/lint/end_alignment.rb', line 72

def on_until(node)
  check_other_alignment(node)
end

#on_while(node) ⇒ Object



68
69
70
# File 'lib/rubocop/cop/lint/end_alignment.rb', line 68

def on_while(node)
  check_other_alignment(node)
end