Class: Rubocop::Cop::Lint::EndAlignment

Inherits:
Cop
  • Object
show all
Includes:
CheckAssignment, CheckMethods, ConfigurableEnforcedStyle
Defined in:
lib/rubocop/cop/lint/end_alignment.rb

Overview

This cop checks whether the end keywords are aligned properly.

Two modes are supported through the AlignWith configuration parameter. If it's set to keyword (which is the default), the end shall be aligned with the start of the keyword (if, def, 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.

Examples:


variable = if true
           end

Constant Summary collapse

MSG =
'end at %d, %d is not aligned with %s at %d, %d'

Constants included from CheckAssignment

CheckAssignment::TYPES

Constants included from Util

Util::ASGN_NODES, Util::EQUALS_ASGN_NODES, Util::OPERATOR_METHODS, Util::PROC_NEW_NODE, 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, #both_styles_detected, #correct_style_detected, #opposite_style_detected, #style, #unrecognized_style_detected

Methods included from CheckAssignment

#on_casgn, #on_op_asgn

Methods included from CheckMethods

#on_def, #on_defs

Methods inherited from Cop

#add_offense, all, #autocorrect?, #config_to_allow_offenses, #config_to_allow_offenses=, #cop_config, cop_name, #cop_name, cop_type, #debug?, #display_cop_names?, #exclude_file?, #include_file?, inherited, #initialize, lint?, #message, non_rails, rails?, #relevant_file?, #support_autocorrect?

Methods included from IgnoredNode

#ignore_node, #ignored_node?, #part_of_ignored_node?

Methods included from Util

block_length, command?, comment_line?, const_name, first_part_of_call_chain, lambda?, lambda_or_proc?, line_range, on_node, operator?, parentheses?, proc?, range_with_surrounding_space, source_range, strip_quotes

Methods included from PathUtil

match_path?, relative_path

Constructor Details

This class inherits a constructor from Rubocop::Cop::Cop

Instance Method Details

#on_class(node) ⇒ Object



25
26
27
# File 'lib/rubocop/cop/lint/end_alignment.rb', line 25

def on_class(node)
  check(node)
end

#on_if(node) ⇒ Object



33
34
35
# File 'lib/rubocop/cop/lint/end_alignment.rb', line 33

def on_if(node)
  check(node) if node.loc.respond_to?(:end)
end

#on_module(node) ⇒ Object



29
30
31
# File 'lib/rubocop/cop/lint/end_alignment.rb', line 29

def on_module(node)
  check(node)
end

#on_send(node) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/rubocop/cop/lint/end_alignment.rb', line 45

def on_send(node)
  receiver, method_name, *args = *node
  if visibility_and_def_on_same_line?(receiver, method_name, args)
    expr = node.loc.expression
    method_def = args.first
    range = Parser::Source::Range.new(expr.source_buffer,
                                      expr.begin_pos,
                                      method_def.loc.keyword.end_pos)
    check_offset(method_def, range.source,
                 method_def.loc.keyword.begin_pos - expr.begin_pos)
    ignore_node(method_def) # Don't check the same `end` again.
  end
end

#on_until(node) ⇒ Object



41
42
43
# File 'lib/rubocop/cop/lint/end_alignment.rb', line 41

def on_until(node)
  check(node)
end

#on_while(node) ⇒ Object



37
38
39
# File 'lib/rubocop/cop/lint/end_alignment.rb', line 37

def on_while(node)
  check(node)
end