module RuboCop::Cop::Alignment

This module checks for nodes that should be aligned to the left or right. This amount is determined by the instance variable @column_delta.

Constants

SPACE

Attributes

column_delta[R]

Private Instance Methods

check_alignment(items, base_column = nil) click to toggle source
# File lib/rubocop/cop/mixin/alignment.rb, line 27
def check_alignment(items, base_column = nil)
  unless items.empty?
    base_column ||= display_column(items.first.source_range)
  end

  each_bad_alignment(items, base_column) do |current|
    expr = current.source_range
    if offenses.any? { |o| within?(expr, o.location) }
      # If this offense is within a line range that is already being
      # realigned by autocorrect, we report the offense without
      # autocorrecting it. Two rewrites in the same area by the same
      # cop can not be handled. The next iteration will find the
      # offense again and correct it.
      add_offense(nil, location: expr)
    else
      add_offense(current)
    end
  end
end
configured_indentation_width() click to toggle source
# File lib/rubocop/cop/mixin/alignment.rb, line 14
def configured_indentation_width
  cop_config['IndentationWidth'] ||
    config.for_cop('IndentationWidth')['Width']
end
display_column(range) click to toggle source
# File lib/rubocop/cop/mixin/alignment.rb, line 60
def display_column(range)
  line = processed_source.lines[range.line - 1]
  Unicode::DisplayWidth.of(line[0, range.column])
end
each_bad_alignment(items, base_column) { |current| ... } click to toggle source
# File lib/rubocop/cop/mixin/alignment.rb, line 47
def each_bad_alignment(items, base_column)
  prev_line = -1
  items.each do |current|
    if current.loc.line > prev_line &&
       begins_its_line?(current.source_range)
      @column_delta = base_column - display_column(current.source_range)

      yield current if @column_delta.nonzero?
    end
    prev_line = current.loc.line
  end
end
end_of_line_comment(line) click to toggle source
# File lib/rubocop/cop/mixin/alignment.rb, line 69
def end_of_line_comment(line)
  processed_source.find_comment { |c| c.loc.line == line }
end
indentation(node) click to toggle source
# File lib/rubocop/cop/mixin/alignment.rb, line 19
def indentation(node)
  offset(node) + (SPACE * configured_indentation_width)
end
offset(node) click to toggle source
# File lib/rubocop/cop/mixin/alignment.rb, line 23
def offset(node)
  SPACE * node.loc.column
end
within?(inner, outer) click to toggle source
# File lib/rubocop/cop/mixin/alignment.rb, line 65
def within?(inner, outer)
  inner.begin_pos >= outer.begin_pos && inner.end_pos <= outer.end_pos
end