class RubbyCop::Cop::Layout::RescueEnsureAlignment

This cop checks whether the rescue and ensure keywords are aligned properly.

@example

# bad
begin
  something
  rescue
  puts 'error'
end

# good
begin
  something
rescue
  puts 'error'
end

Constants

MSG

Public Instance Methods

autocorrect(node) click to toggle source
# File lib/rubbycop/cop/layout/rescue_ensure_alignment.rb, line 43
def autocorrect(node)
  whitespace = whitespace_range(node)
  return false unless whitespace.source.strip.empty?

  new_column = ancestor_node(node).loc.end.column
  ->(corrector) { corrector.replace(whitespace, ' ' * new_column) }
end
investigate(processed_source) click to toggle source
# File lib/rubbycop/cop/layout/rescue_ensure_alignment.rb, line 35
def investigate(processed_source)
  @modifier_locations =
    processed_source.tokens.each_with_object([]) do |token, locations|
      next unless token.type == :kRESCUE_MOD
      locations << token.pos
    end
end
on_ensure(node) click to toggle source
# File lib/rubbycop/cop/layout/rescue_ensure_alignment.rb, line 31
def on_ensure(node)
  check(node)
end
on_resbody(node) click to toggle source
# File lib/rubbycop/cop/layout/rescue_ensure_alignment.rb, line 27
def on_resbody(node)
  check(node) unless modifier?(node)
end

Private Instance Methods

ancestor_node(node) click to toggle source
# File lib/rubbycop/cop/layout/rescue_ensure_alignment.rb, line 80
def ancestor_node(node)
  node.each_ancestor(:kwbegin, :def, :defs, :class, :module).first
end
check(node) click to toggle source
# File lib/rubbycop/cop/layout/rescue_ensure_alignment.rb, line 53
def check(node)
  end_loc = ancestor_node(node).loc.end
  kw_loc = node.loc.keyword

  return if end_loc.column == kw_loc.column
  return if end_loc.line == kw_loc.line

  add_offense(node, kw_loc, format_message(kw_loc, end_loc))
end
format_message(kw_loc, end_loc) click to toggle source
# File lib/rubbycop/cop/layout/rescue_ensure_alignment.rb, line 63
def format_message(kw_loc, end_loc)
  format(MSG, kw_loc.source, kw_loc.line, kw_loc.column, end_loc.line,
         end_loc.column)
end
modifier?(node) click to toggle source
# File lib/rubbycop/cop/layout/rescue_ensure_alignment.rb, line 68
def modifier?(node)
  return false unless @modifier_locations.respond_to?(:include?)
  @modifier_locations.include?(node.loc.keyword)
end
whitespace_range(node) click to toggle source
# File lib/rubbycop/cop/layout/rescue_ensure_alignment.rb, line 73
def whitespace_range(node)
  begin_pos = node.loc.keyword.begin_pos
  current_column = node.loc.keyword.column

  range_between(begin_pos - current_column, begin_pos)
end