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'

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, #parameter_name, #style, #unrecognized_style_detected

Methods included from OnMethodDef

#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_name_with_namespace, cop_type, #debug?, #display_cop_names?, inherited, #initialize, #join_force?, lint?, #message, non_rails, qualified_cop_name, rails?, #relevant_file?, #support_autocorrect?

Methods included from IgnoredNode

#ignore_node, #ignored_node?, #part_of_ignored_node?

Methods included from Util

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

Methods included from PathUtil

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



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

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

#on_send(node) ⇒ Object



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

def on_send(node)
  receiver, method_name, *args = *node
  return unless visibility_and_def_on_same_line?(receiver, method_name,
                                                 args)

  method_def = args.first
  if style == :start_of_line
    expr = node.loc.expression
    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)
  else
    check_offset(method_def, 'def', 0)
  end

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