This represents a location in the source.
The byte offset from the beginning of the source where this location starts.
The length of this location in bytes.
The list of comments attached to this location
# File tmp/rubies/ruby-3.3.0/lib/prism/parse_result.rb, line 108
def initialize(source, start_offset, length)
@source = source
@start_offset = start_offset
@length = length
@comments = []
end
Create a new location object with the given source, start byte offset, and byte length.
# File tmp/rubies/ruby-3.3.0/lib/prism/parse_result.rb, line 221
def self.null
new(nil, 0, 0)
end
Returns a null location that does not correspond to a source and points to the beginning of the file. Useful for when you want a location object but do not care where it points.
# File tmp/rubies/ruby-3.3.0/lib/prism/parse_result.rb, line 202
def ==(other)
other.is_a?(Location) &&
other.start_offset == start_offset &&
other.end_offset == end_offset
end
Returns true if the given other location is equal to this location.
# File tmp/rubies/ruby-3.3.0/lib/prism/parse_result.rb, line 116
def copy(**options)
Location.new(
options.fetch(:source) { source },
options.fetch(:start_offset) { start_offset },
options.fetch(:length) { length }
)
end
Create a new location object with the given options.
# File tmp/rubies/ruby-3.3.0/lib/prism/parse_result.rb, line 192
def deconstruct_keys(keys)
{ start_offset: start_offset, end_offset: end_offset }
end
Implement the hash pattern matching interface for Location
.
# File tmp/rubies/ruby-3.3.0/lib/prism/parse_result.rb, line 187
def end_character_column
source.character_column(end_offset)
end
The column number in characters where this location ends from the start of the line.
# File tmp/rubies/ruby-3.3.0/lib/prism/parse_result.rb, line 147
def end_character_offset
source.character_offset(end_offset)
end
The character offset from the beginning of the source where this location ends.
# File tmp/rubies/ruby-3.3.0/lib/prism/parse_result.rb, line 181
def end_column
source.column(end_offset)
end
The column number in bytes where this location ends from the start of the line.
# File tmp/rubies/ruby-3.3.0/lib/prism/parse_result.rb, line 163
def end_line
source.line(end_offset)
end
The line number where this location ends.
# File tmp/rubies/ruby-3.3.0/lib/prism/parse_result.rb, line 141
def end_offset
start_offset + length
end
The byte offset from the beginning of the source where this location ends.
# File tmp/rubies/ruby-3.3.0/lib/prism/parse_result.rb, line 125
def inspect
"#<Prism::Location @start_offset=#{@start_offset} @length=#{@length} start_line=#{start_line}>"
end
Returns a string representation of this location.
# File tmp/rubies/ruby-3.3.0/lib/prism/parse_result.rb, line 211
def join(other)
raise "Incompatible sources" if source != other.source
raise "Incompatible locations" if start_offset > other.start_offset
Location.new(source, start_offset, other.end_offset - start_offset)
end
Returns a new location that stretches from this location to the given other location. Raises an error if this location is not before the other location or if they don’t share the same source.
# File tmp/rubies/ruby-3.3.0/lib/prism/parse_result.rb, line 197
def pretty_print(q)
q.text("(#{start_line},#{start_column})-(#{end_line},#{end_column})")
end
Implement the pretty print interface for Location
.
# File tmp/rubies/ruby-3.3.0/lib/prism/parse_result.rb, line 130
def slice
source.slice(start_offset, length)
end
The source code that this location represents.
# File tmp/rubies/ruby-3.3.0/lib/prism/parse_result.rb, line 175
def start_character_column
source.character_column(start_offset)
end
The column number in characters where this location ends from the start of the line.
# File tmp/rubies/ruby-3.3.0/lib/prism/parse_result.rb, line 136
def start_character_offset
source.character_offset(start_offset)
end
The character offset from the beginning of the source where this location starts.
# File tmp/rubies/ruby-3.3.0/lib/prism/parse_result.rb, line 169
def start_column
source.column(start_offset)
end
The column number in bytes where this location starts from the start of the line.
# File tmp/rubies/ruby-3.3.0/lib/prism/parse_result.rb, line 152
def start_line
source.line(start_offset)
end
The line number where this location starts.
# File tmp/rubies/ruby-3.3.0/lib/prism/parse_result.rb, line 157
def start_line_slice
offset = source.line_start(start_offset)
source.slice(offset, start_offset - offset)
end
The content of the line where this location starts before this location.