Class: RuboCop::Cop::Layout::DefEndAlignment

Inherits:
Cop
  • Object
show all
Includes:
EndKeywordAlignment, RangeHelp
Defined in:
lib/rubocop/cop/layout/def_end_alignment.rb

Overview

This cop checks whether the end keywords of method definitions are aligned properly.

Two modes are supported through the EnforcedStyleAlignWith configuration parameter. If it’s set to start_of_line (which is the default), the end shall be aligned with the start of the line where the def keyword is. If it’s set to def, the end shall be aligned with the def keyword.

Examples:

EnforcedStyleAlignWith: start_of_line (default)

# bad

private def foo
            end

# good

private def foo
end

EnforcedStyleAlignWith: def

# bad

private def foo
            end

# good

private def foo
        end

Constant Summary collapse

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

Constants included from Util

Util::LITERAL_REGEX

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 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?, escape_string, first_part_of_call_chain, interpret_string_escapes, line_range, needs_escaping?, on_node, parentheses?, same_line?, to_string_literal, to_supported_styles, tokens, trim_string_interporation_escape_character

Methods included from PathUtil

absolute?, chdir, hidden_dir?, hidden_file_in_not_hidden_dir?, 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



64
65
66
67
68
69
70
# File 'lib/rubocop/cop/layout/def_end_alignment.rb', line 64

def autocorrect(node)
  if style == :start_of_line && node.parent && node.parent.send_type?
    AlignmentCorrector.align_end(processed_source, node, node.parent)
  else
    AlignmentCorrector.align_end(processed_source, node, node)
  end
end

#on_def(node) ⇒ Object Also known as: on_defs



42
43
44
# File 'lib/rubocop/cop/layout/def_end_alignment.rb', line 42

def on_def(node)
  check_end_kw_in_node(node)
end

#on_send(node) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/rubocop/cop/layout/def_end_alignment.rb', line 47

def on_send(node)
  return unless node.def_modifier?

  method_def = node.each_descendant(:def, :defs).first
  expr = node.source_range

  line_start = range_between(expr.begin_pos,
                             method_def.loc.keyword.end_pos)
  align_with = {
    def: method_def.loc.keyword,
    start_of_line: line_start
  }

  check_end_kw_alignment(method_def, align_with)
  ignore_node(method_def) # Don't check the same `end` again.
end