+(other)
click to toggle source
def +(other)
if other
raise "Invalid concat: buffer=#{buffer.name}, other.buffer=#{other.buffer.name}" unless other.buffer == buffer
self.class.new(buffer: buffer,
start_pos: start_pos,
end_pos: other.end_pos)
else
self
end
end
<<(other)
click to toggle source
def <<(other)
if other
raise "Invalid concat: buffer=#{buffer.name}, other.buffer=#{other.buffer.name}" unless other.buffer == buffer
@end_pos = other.end_pos
@source = nil
@end_loc = nil
end
self
end
==(other)
click to toggle source
def ==(other)
other.is_a?(Location) &&
other.buffer == buffer &&
other.start_pos == start_pos &&
other.end_pos == end_pos
end
concat(*others)
click to toggle source
def concat(*others)
others.each { |other| self << other }
self
end
end_column()
click to toggle source
def end_column
end_loc[1]
end
end_line()
click to toggle source
def end_line
end_loc[0]
end
end_loc()
click to toggle source
def end_loc
@end_loc ||= buffer.pos_to_loc(end_pos)
end
inspect()
click to toggle source
def inspect
"#<#{self.class}:#{self.__id__} @buffer=#{buffer.name}, @pos=#{start_pos}...#{end_pos}, source='#{source.lines.first}', start_line=#{start_line}, start_column=#{start_column}>"
end
name()
click to toggle source
pred?(loc)
click to toggle source
def pred?(loc)
loc.is_a?(Location) &&
loc.name == name &&
loc.start_pos == end_pos
end
source()
click to toggle source
def source
@source ||= buffer.content[start_pos...end_pos] or raise
end
start_column()
click to toggle source
def start_column
start_loc[1]
end
start_line()
click to toggle source
def start_line
start_loc[0]
end
start_loc()
click to toggle source
def start_loc
@start_loc ||= buffer.pos_to_loc(start_pos)
end
to_json(*args)
click to toggle source
def to_json(*args)
{
start: {
line: start_line,
column: start_column
},
end
to_s()
click to toggle source
def to_s
"#{name || "-"}:#{start_line}:#{start_column}...#{end_line}:#{end_column}"
end