class Parser::Lexer::Dedenter

def dedent(string)

https://github.com/whitequark/parser/blob/b7a08031523d05b2f76b0bab22fac00b1d3fe653/lib/parser/lexer/dedenter.rb#L36
Taken From:
def dedent(string)
  original_encoding = string.encoding
  # Prevent the following error when processing binary encoded source.
  # "\xC0".split # => ArgumentError (invalid byte sequence in UTF-8)
  lines = string.force_encoding(Encoding::BINARY).split("\\\n")
  if lines.length == 1
    # If the line continuation sequence was found but there is no second
    # line, it was not really a line continuation and must be ignored.
    lines = [string.force_encoding(original_encoding)]
  else
    lines.map! { |s| s.force_encoding(original_encoding) }
  end
  lines.each_with_index do |line, index|
    next if (index == 0) && !@at_line_begin
    left_to_remove = @dedent_level
    remove = 0
    line.each_char do |char|
      break if left_to_remove <= 0
      case char
      when "\s"
        remove += 1
        left_to_remove -= 1
      when "\t"
        break if TAB_WIDTH * (remove / TAB_WIDTH + 1) > @dedent_level
        remove += 1
        left_to_remove -= TAB_WIDTH
      else
        # no more spaces or tabs
        break
      end
    end
    lines[index] = line[remove..-1]
  end
  string = lines.join
  @at_line_begin = string.end_with?("\n")
  string
end