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 26
def check_alignment(items, base_column = nil)
  base_column ||= display_column(items.first.source_range) unless items.empty?

  each_bad_alignment(items, base_column) do |current|
    expr = current.source_range
    if @current_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 cannot be handled. The next iteration will find the
      # offense again and correct it.
      register_offense(expr, nil)
    else
      register_offense(current, 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('Layout/IndentationWidth')['Width']
end
display_column(range) click to toggle source

@api public

# File lib/rubocop/cop/mixin/alignment.rb, line 58
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

@api private

# File lib/rubocop/cop/mixin/alignment.rb, line 45
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

@deprecated Use processed_source.comment_at_line(line)

# File lib/rubocop/cop/mixin/alignment.rb, line 69
def end_of_line_comment(line)
  processed_source.line_with_comment?(line)
end
indentation(node) click to toggle source
# File lib/rubocop/cop/mixin/alignment.rb, line 18
def indentation(node)
  offset(node) + (SPACE * configured_indentation_width)
end
offset(node) click to toggle source
# File lib/rubocop/cop/mixin/alignment.rb, line 22
def offset(node)
  SPACE * node.loc.column
end
register_offense(offense_node, message_node) click to toggle source

@api private

# File lib/rubocop/cop/mixin/alignment.rb, line 74
def register_offense(offense_node, message_node)
  add_offense(offense_node, message: message(message_node)) do |corrector|
    autocorrect(corrector, message_node)
  end
end
within?(inner, outer) click to toggle source

@api public

# File lib/rubocop/cop/mixin/alignment.rb, line 64
def within?(inner, outer)
  inner.begin_pos >= outer.begin_pos && inner.end_pos <= outer.end_pos
end