class Prism::Location

这表示源代码中的一个位置。

属性

length[R]

此位置的字节长度。

source[R]

一个 Source 对象,用于从给定的偏移量和长度确定更多信息。

start_offset[R]

此位置开始的源文件起始字节偏移量。

公共类方法

new(source, start_offset, length) 点击切换源码

使用给定的源、起始字节偏移量和字节长度创建一个新的位置对象。

# File prism/parse_result.rb, line 288
def initialize(source, start_offset, length)
  @source = source
  @start_offset = start_offset
  @length = length

  # These are used to store comments that are associated with this location.
  # They are initialized to `nil` to save on memory when there are no
  # comments to be attached and/or the comment-related APIs are not used.
  @leading_comments = nil
  @trailing_comments = nil
end

公共实例方法

==(other) 点击切换源码

如果给定的其他位置等于此位置,则返回 true。

# File prism/parse_result.rb, line 476
def ==(other)
  Location === other &&
    other.start_offset == start_offset &&
    other.end_offset == end_offset
end
adjoin(string) 点击切换源码

将此位置与同一行上此位置之后源代码中首次出现的字符串连接,并返回新位置。如果字符串不存在,则会引发错误。

# File prism/parse_result.rb, line 495
def adjoin(string)
  line_suffix = source.slice(end_offset, source.line_end(end_offset) - end_offset)

  line_suffix_index = line_suffix.byteindex(string)
  raise "Could not find #{string}" if line_suffix_index.nil?

  Location.new(source, start_offset, length + line_suffix_index + string.bytesize)
end
cached_end_code_units_column(cache) 点击切换源码

使用给定的缓存获取或计算的值,以代码单元表示的结束列。

# File prism/parse_result.rb, line 461
def cached_end_code_units_column(cache)
  cache[end_offset] - cache[source.line_start(end_offset)]
end
cached_end_code_units_offset(cache) 点击切换源码

使用给定的缓存获取或计算的值,以代码单元表示的从文件开始的结束偏移量。

# File prism/parse_result.rb, line 397
def cached_end_code_units_offset(cache)
  cache[end_offset]
end
cached_start_code_units_column(cache) 点击切换源码

使用给定的缓存获取或计算的值,以代码单元表示的起始列。

# File prism/parse_result.rb, line 437
def cached_start_code_units_column(cache)
  cache[start_offset] - cache[source.line_start(start_offset)]
end
cached_start_code_units_offset(cache) 点击切换源码

使用给定的缓存获取或计算的值,以代码单元表示的从文件开始的起始偏移量。

# File prism/parse_result.rb, line 375
def cached_start_code_units_offset(cache)
  cache[start_offset]
end
chop() 点击切换源码

返回一个新的位置,该位置是通过截断最后一个字节的结果。

# File prism/parse_result.rb, line 334
def chop
  copy(length: length == 0 ? length : length - 1)
end
comments() 点击切换源码

返回与此位置关联的所有注释(前导和尾随注释)。

# File prism/parse_result.rb, line 324
def comments
  [*@leading_comments, *@trailing_comments]
end
copy(source: self.source, start_offset: self.start_offset, length: self.length) 点击切换源码

使用给定的选项创建一个新的位置对象。

# File prism/parse_result.rb, line 329
def copy(source: self.source, start_offset: self.start_offset, length: self.length)
  Location.new(source, start_offset, length)
end
deconstruct_keys(keys) 点击切换源码

Location 实现哈希模式匹配接口。

# File prism/parse_result.rb, line 466
def deconstruct_keys(keys)
  { start_offset: start_offset, end_offset: end_offset }
end
end_character_column() 点击切换源码

此位置结束时,从行首开始以字符表示的列号。

# File prism/parse_result.rb, line 449
def end_character_column
  source.character_column(end_offset)
end
end_character_offset() 点击切换源码

此位置结束时,从源文件开头开始以字符表示的偏移量。

# File prism/parse_result.rb, line 386
def end_character_offset
  source.character_offset(end_offset)
end
end_code_units_column(encoding = Encoding::UTF_16LE) 点击切换源码

此位置结束时,从行首开始以给定编码的代码单元表示的列号。

# File prism/parse_result.rb, line 455
def end_code_units_column(encoding = Encoding::UTF_16LE)
  source.code_units_column(end_offset, encoding)
end
end_code_units_offset(encoding = Encoding::UTF_16LE) 点击切换源码

以给定编码的代码单元表示的从文件开始的偏移量。

# File prism/parse_result.rb, line 391
def end_code_units_offset(encoding = Encoding::UTF_16LE)
  source.code_units_offset(end_offset, encoding)
end
end_column() 点击切换源码

此位置结束时,从行首开始以字节表示的列号。

# File prism/parse_result.rb, line 443
def end_column
  source.column(end_offset)
end
end_line() 点击切换源码

此位置结束时的行号。

# File prism/parse_result.rb, line 413
def end_line
  source.line(end_offset)
end
end_offset() 点击切换源码

此位置结束时,从源文件开头开始以字节表示的偏移量。

# File prism/parse_result.rb, line 380
def end_offset
  start_offset + length
end
inspect() 点击切换源码

返回此位置的字符串表示形式。

# File prism/parse_result.rb, line 339
def inspect
  "#<Prism::Location @start_offset=#{@start_offset} @length=#{@length} start_line=#{start_line}>"
end
join(other) 点击切换源码

返回一个新的位置,该位置从此位置延伸到给定的其他位置。如果此位置不在其他位置之前,或者它们不共享同一个源,则会引发错误。

# File prism/parse_result.rb, line 485
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
leading_comment(comment) 点击切换源码

将注释附加到此位置的前导注释。

# File prism/parse_result.rb, line 307
def leading_comment(comment)
  leading_comments << comment
end
leading_comments() 点击切换源码

这些是与此位置关联的,且在此位置开始之前存在的注释。

# File prism/parse_result.rb, line 302
def leading_comments
  @leading_comments ||= []
end
pretty_print(q) 点击切换源码

Location 实现漂亮打印接口。

# File prism/parse_result.rb, line 471
def pretty_print(q)
  q.text("(#{start_line},#{start_column})-(#{end_line},#{end_column})")
end
slice() 点击切换源码

此位置表示的源代码。

# File prism/parse_result.rb, line 349
def slice
  source.slice(start_offset, length)
end
slice_lines() 点击切换源码

此位置表示的源代码,从该位置开始所在的行开头到该位置结束所在的行结尾。

# File prism/parse_result.rb, line 356
def slice_lines
  line_start = source.line_start(start_offset)
  line_end = source.line_end(end_offset)
  source.slice(line_start, line_end - line_start)
end
source_lines() 点击切换源码

返回与此位置关联的所有源代码行。

# File prism/parse_result.rb, line 344
def source_lines
  source.lines
end
start_character_column() 点击切换源码

此位置结束时,从行首开始以字符表示的列号。

# File prism/parse_result.rb, line 425
def start_character_column
  source.character_column(start_offset)
end
start_character_offset() 点击切换源码

此位置开始时,从源文件开头开始以字符表示的偏移量。

# File prism/parse_result.rb, line 364
def start_character_offset
  source.character_offset(start_offset)
end
start_code_units_column(encoding = Encoding::UTF_16LE) 点击切换源码

此位置开始时,从行首开始以给定编码的代码单元表示的列号。

# File prism/parse_result.rb, line 431
def start_code_units_column(encoding = Encoding::UTF_16LE)
  source.code_units_column(start_offset, encoding)
end
start_code_units_offset(encoding = Encoding::UTF_16LE) 点击切换源码

以给定编码的代码单元表示的从文件开始的偏移量。

# File prism/parse_result.rb, line 369
def start_code_units_offset(encoding = Encoding::UTF_16LE)
  source.code_units_offset(start_offset, encoding)
end
start_column() 点击切换源码

此位置开始时,从行首开始以字节表示的列号。

# File prism/parse_result.rb, line 419
def start_column
  source.column(start_offset)
end
start_line() 点击切换源码

此位置开始时的行号。

# File prism/parse_result.rb, line 402
def start_line
  source.line(start_offset)
end
start_line_slice() 点击切换源码

此位置开始所在的行中,此位置之前的内容。

# File prism/parse_result.rb, line 407
def start_line_slice
  offset = source.line_start(start_offset)
  source.slice(offset, start_offset - offset)
end
trailing_comment(comment) 点击切换源码

将注释附加到此位置的尾随注释。

# File prism/parse_result.rb, line 318
def trailing_comment(comment)
  trailing_comments << comment
end
trailing_comments() 点击切换源码

这些是与此位置关联的,且在此位置结束之后存在的注释。

# File prism/parse_result.rb, line 313
def trailing_comments
  @trailing_comments ||= []
end