Skip to Content Skip to Search

This represents a source of Ruby code that has been parsed. It is used in conjunction with locations to allow them to resolve line numbers and source ranges.

Methods
C
L
N
S

Attributes

[R] offsets

The list of newline byte offsets in the source code.

[R] source

The source code that this source object represents.

[RW] start_line

The line number where this source starts.

Class Public methods

new(source, start_line = 1, offsets = compute_offsets(source))

Create a new source object with the given source code and newline byte offsets. If no newline byte offsets are given, they will be computed from the source code.

# File ruby/lib/prism/parse_result.rb, line 20
def initialize(source, start_line = 1, offsets = compute_offsets(source))
  @source = source
  @start_line = start_line
  @offsets = offsets
end

Instance Public methods

character_column(byte_offset)

Return the column number in characters for the given byte offset.

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

character_offset(byte_offset)

Return the character offset for the given byte offset.

# File ruby/lib/prism/parse_result.rb, line 50
def character_offset(byte_offset)
  source.byteslice(0, byte_offset).length
end

column(byte_offset)

Return the column number for the given byte offset.

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

line(byte_offset)

Binary search through the offsets to find the line number for the given byte offset.

# File ruby/lib/prism/parse_result.rb, line 34
def line(byte_offset)
  start_line + find_line(byte_offset)
end

line_start(byte_offset)

Return the byte offset of the start of the line corresponding to the given byte offset.

# File ruby/lib/prism/parse_result.rb, line 40
def line_start(byte_offset)
  offsets[find_line(byte_offset)]
end

slice(byte_offset, length)

Perform a byteslice on the source code using the given byte offset and byte length.

# File ruby/lib/prism/parse_result.rb, line 28
def slice(byte_offset, length)
  source.byteslice(byte_offset, length)
end