module RuboCop::Cop::PrecedingFollowingAlignment

def aligned_assignment?(range, line)

def aligned_assignment?(range, line)
  range.source[-1] == '=' && line[range.last_column - 1] == '='
end

def aligned_char?(range, line)

def aligned_char?(range, line)
  line[range.column] == range.source[0]
end

def aligned_comment_lines

def aligned_comment_lines
  @aligned_comment_lines ||=
    processed_source.comments.map(&:loc).select do |r|
      begins_its_line?(r.expression)
    end.map(&:line)
end

def aligned_identical?(range, line)

def aligned_identical?(range, line)
  range.source == line[range.column, range.size]
end

def aligned_operator?(range, line)

def aligned_operator?(range, line)
  (aligned_identical?(range, line) || aligned_assignment?(range, line))
end

def aligned_token?(range, line)

def aligned_token?(range, line)
  aligned_words?(range, line) ||
    aligned_char?(range, line) ||
    aligned_assignment?(range, line)
end

def aligned_with_adjacent_line?(range, predicate)

def aligned_with_adjacent_line?(range, predicate)
  # minus 2 because node.loc.line is zero-based
  pre  = (range.line - 2).downto(0)
  post = range.line.upto(processed_source.lines.size - 1)
  aligned_with_any_line_range?([pre, post], range, &predicate)
end

def aligned_with_any_line?(line_ranges, range, indent = nil, &predicate)

def aligned_with_any_line?(line_ranges, range, indent = nil, &predicate)
  line_ranges.any? do |line_nos|
    aligned_with_line?(line_nos, range, indent, &predicate)
  end
end

def aligned_with_any_line_range?(line_ranges, range, &predicate)

def aligned_with_any_line_range?(line_ranges, range, &predicate)
  return true if aligned_with_any_line?(line_ranges, range, &predicate)
  # If no aligned token was found, search for an aligned token on the
  # nearest line with the same indentation as the checked line.
  base_indentation = processed_source.lines[range.line - 1] =~ /\S/
  aligned_with_any_line?(line_ranges, range, base_indentation, &predicate)
end

def aligned_with_line?(line_nos, range, indent = nil)

def aligned_with_line?(line_nos, range, indent = nil)
  line_nos.each do |lineno|
    next if aligned_comment_lines.include?(lineno + 1)
    line = processed_source.lines[lineno]
    index = line =~ /\S/
    next unless index
    next if indent && indent != index
    return yield(range, line)
  end
  false
end

def aligned_with_operator?(range)

def aligned_with_operator?(range)
  aligned_with_adjacent_line?(range, method(:aligned_operator?))
end

def aligned_with_something?(range)

def aligned_with_something?(range)
  aligned_with_adjacent_line?(range, method(:aligned_token?))
end

def aligned_words?(range, line)

def aligned_words?(range, line)
  line[range.column - 1, 2] =~ /\s\S/
end

def allow_for_alignment?

def allow_for_alignment?
  cop_config['AllowForAlignment']
end