module RubbyCop::Cop::EndKeywordAlignment

Functions for checking the alignment of the `end` keyword.

Constants

MSG

Private Instance Methods

add_offense_for_misalignment(node, align_with) click to toggle source
# File lib/rubbycop/cop/mixin/end_keyword_alignment.rb, line 40
def add_offense_for_misalignment(node, align_with)
  end_loc = node.loc.end
  msg = format(MSG, end_loc.line, end_loc.column, align_with.source,
               align_with.line, align_with.column)
  add_offense(node, end_loc, msg)
end
align(node, align_to) click to toggle source
# File lib/rubbycop/cop/mixin/end_keyword_alignment.rb, line 60
def align(node, align_to)
  whitespace = whitespace_range(node)
  return false unless whitespace.source.strip.empty?

  column = alignment_column(align_to)
  ->(corrector) { corrector.replace(whitespace, ' ' * column) }
end
alignment_column(align_to) click to toggle source
# File lib/rubbycop/cop/mixin/end_keyword_alignment.rb, line 74
def alignment_column(align_to)
  if !align_to
    0
  elsif align_to.respond_to?(:loc)
    align_to.source_range.column
  else
    align_to.column
  end
end
check_end_kw_alignment(node, align_ranges) click to toggle source
# File lib/rubbycop/cop/mixin/end_keyword_alignment.rb, line 17
def check_end_kw_alignment(node, align_ranges)
  return if ignored_node?(node)

  end_loc = node.loc.end
  return unless end_loc # Discard modifier forms of if/while/until.

  matching = matching_ranges(end_loc, align_ranges)

  if matching.key?(style)
    correct_style_detected
  else
    add_offense_for_misalignment(node, align_ranges[style])
    style_detected(matching.keys)
  end
end
check_end_kw_in_node(node) click to toggle source
# File lib/rubbycop/cop/mixin/end_keyword_alignment.rb, line 13
def check_end_kw_in_node(node)
  check_end_kw_alignment(node, style => node.loc.keyword)
end
line_break_before_keyword?(whole_expression, rhs) click to toggle source
# File lib/rubbycop/cop/mixin/end_keyword_alignment.rb, line 56
def line_break_before_keyword?(whole_expression, rhs)
  rhs.loc.line > whole_expression.line
end
matching_ranges(end_loc, align_ranges) click to toggle source
# File lib/rubbycop/cop/mixin/end_keyword_alignment.rb, line 33
def matching_ranges(end_loc, align_ranges)
  align_ranges.select do |_, range|
    range.line == end_loc.line ||
      effective_column(range) == end_loc.column
  end
end
style_parameter_name() click to toggle source
# File lib/rubbycop/cop/mixin/end_keyword_alignment.rb, line 47
def style_parameter_name
  'EnforcedStyleAlignWith'
end
variable_alignment?(whole_expression, rhs, end_alignment_style) click to toggle source
# File lib/rubbycop/cop/mixin/end_keyword_alignment.rb, line 51
def variable_alignment?(whole_expression, rhs, end_alignment_style)
  end_alignment_style == :variable &&
    !line_break_before_keyword?(whole_expression, rhs)
end
whitespace_range(node) click to toggle source
# File lib/rubbycop/cop/mixin/end_keyword_alignment.rb, line 68
def whitespace_range(node)
  begin_pos = node.loc.end.begin_pos

  range_between(begin_pos - node.loc.end.column, begin_pos)
end