class Ruby::Prism::ASCIISource

Specialized version of Ruby::Prism::Source for source code that includes ASCII characters only. This class is used to apply performance optimizations that cannot be applied to sources that include multibyte characters.

In the extremely rare case that a source includes multi-byte characters but is marked as binary because of a magic encoding comment and it cannot be eagerly converted to UTF-8, this class will be used as well. This is because at that point we will treat everything as single-byte characters.

Public Instance Methods

Return the column in characters for the given byte offset.

: (Integer byte_offset) -> Integer

# File lib/ruby/prism/parse_result.rb, line 360
def character_column(byte_offset)
  byte_offset - line_start(byte_offset)
end

Return the character offset for the given byte offset.

: (Integer byte_offset) -> Integer

# File lib/ruby/prism/parse_result.rb, line 353
def character_offset(byte_offset)
  byte_offset
end

Returns a cache that is the identity function in order to maintain the same interface. We can do this because code units are always equivalent to byte offsets for ASCII-only sources.

: (Encoding encoding) -> _CodeUnitsCache

# File lib/ruby/prism/parse_result.rb, line 381
def code_units_cache(encoding)
  ->(byte_offset) { byte_offset }
end

Specialized version of code_units_column that does not depend on code_units_offset, which is a more expensive operation. This is essentially the same as Ruby::Prism::Source#column.

: (Integer byte_offset, Encoding encoding) -> Integer

# File lib/ruby/prism/parse_result.rb, line 390
def code_units_column(byte_offset, encoding)
  byte_offset - line_start(byte_offset)
end

Returns the offset from the start of the file for the given byte offset counting in code units for the given encoding.

This method is tested with UTF-8, UTF-16, and UTF-32. If there is the concept of code units that differs from the number of characters in other encodings, it is not captured here.

: (Integer byte_offset, Encoding encoding) -> Integer

# File lib/ruby/prism/parse_result.rb, line 372
def code_units_offset(byte_offset, encoding)
  byte_offset
end