Class: RuboCop::Cop::Lint::DefEndAlignment

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

Overview

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

Two modes are supported through the AlignWith 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:


private def foo
end

Constant Summary collapse

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

Constants included from Util

Util::ASGN_NODES, Util::BYTE_ORDER_MARK, Util::EQUALS_ASGN_NODES, Util::LITERAL_REGEX, Util::OPERATOR_METHODS, Util::SHORTHAND_ASGN_NODES, Util::STRING_ESCAPES, Util::STRING_ESCAPE_REGEX

Instance Attribute Summary

Attributes inherited from Cop

#config, #corrections, #offenses, #processed_source

Instance Method Summary collapse

Methods included from ConfigurableEnforcedStyle

#alternative_style, #ambiguous_style_detected, #correct_style_detected, #detected_style, #detected_style=, #no_acceptable_style!, #no_acceptable_style?, #opposite_style_detected, #parameter_name, #style, #style_detected, #supported_styles, #unexpected_style_detected

Methods included from OnMethodDef

#on_def, #on_defs

Methods inherited from Cop

#add_offense, all, #config_to_allow_offenses, #config_to_allow_offenses=, #cop_config, cop_name, #cop_name, cop_type, #correct, #debug?, #details, #display_cop_names?, #display_style_guide?, #excluded_file?, #extra_details?, inherited, #initialize, #join_force?, lint?, match?, #message, non_rails, #parse, qualified_cop_name, #reference_url, #relevant_file?, #style_guide_url, #target_ruby_version

Methods included from Sexp

#s

Methods included from NodePattern::Macros

#def_node_matcher, #def_node_search, #node_search_body

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?, block_length, comment_line?, directions, double_quotes_acceptable?, double_quotes_required?, effective_column, ends_its_line?, first_part_of_call_chain, interpret_string_escapes, line_range, move_pos, numeric_range_size, on_node, operator?, parentheses?, range_with_surrounding_comma, range_with_surrounding_space, source_range, strip_quotes, to_string_literal, to_symbol_literal, within_node?

Methods included from PathUtil

absolute?, hidden?, issue_deprecation_warning, match_path?, relative_path

Constructor Details

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

Instance Method Details

#on_method_def(node, _method_name, _args, _body) ⇒ Object



26
27
28
# File 'lib/rubocop/cop/lint/def_end_alignment.rb', line 26

def on_method_def(node, _method_name, _args, _body)
  check_end_kw_in_node(node)
end

#on_send(node) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/rubocop/cop/lint/def_end_alignment.rb', line 30

def on_send(node)
  return unless modifier_and_def_on_same_line?(node)
  _, _, method_def = *node
  expr = node.source_range

  line_start = Parser::Source::Range.new(expr.source_buffer,
                                         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