要約
解析対象のソースコード全体と各行の開始オフセットの表を保持し、バイトオフセットから行番号・桁位置への変換などを提供するクラスです。 Prism::ParseResult#source で得られます。
実際に得られるインスタンスは、ASCII のみのソース向けに最適化されたサブクラス Prism::ASCIISource の場合があります。クラスの判定をする場合は instance_of? ではなく is_a?(Prism::Source) を使ってください。
require "prism"
source = Prism.parse("foo = 1\nbar = 2\nbaz = foo + bar\n").source
p source.source[0, 7] # => "foo = 1"
p source.line(9) # => 2 (バイトオフセット 9 は 2 行目)
p source.column(9) # => 1
p source.offsets # => [0, 8, 16, 32]
目次
- インスタンスメソッド
インスタンスメソッド
byte_offset(line, column) -> IntegerRuby 3.4 から[permalink][rdoc][edit]-
行番号と桁位置からバイトオフセットを求めます。
- [PARAM]
line: - 行番号(1 origin)
- [PARAM]
column: - 行頭からのバイト単位の桁位置(0 origin)
require "prism" source = Prism.parse("foo = 1\nbar = 2\n").source p source.byte_offset(2, 1) # => 9 p source.line(9) # => 2 - [PARAM]
character_column(byte_offset) -> IntegerRuby 3.3 から[permalink][rdoc][edit]-
byte_offset の位置の、行頭からの文字単位の桁位置(0 origin)を返します。
- [PARAM]
byte_offset: - バイトオフセット
- [PARAM]
character_offset(byte_offset) -> IntegerRuby 3.3 から[permalink][rdoc][edit]-
byte_offset に対応する、ソースコード先頭からの文字単位のオフセットを返します。
- [PARAM]
byte_offset: - バイトオフセット
- [PARAM]
code_units_column(byte_offset, encoding) -> IntegerRuby 3.4 から[permalink][rdoc][edit]-
byte_offset の位置の、行頭からの指定エンコーディングのコード単位での桁位置を返します。
- [PARAM]
byte_offset: - バイトオフセット
- [PARAM]
encoding: - コード単位の基準となるエンコーディング
- [PARAM]
code_units_offset(byte_offset, encoding) -> IntegerRuby 3.4 から[permalink][rdoc][edit]-
byte_offset に対応する、指定エンコーディングのコード単位でのオフセットを返します。UTF-16 のコード単位で位置をやりとりする LSP(Language Server Protocol)などとの連携向けです。
- [PARAM]
byte_offset: - バイトオフセット
- [PARAM]
encoding: - コード単位の基準となるエンコーディング
- [PARAM]
column(byte_offset) -> IntegerRuby 3.3 から[permalink][rdoc][edit]-
byte_offset の位置の、行頭からのバイト単位の桁位置(0 origin)を返します。
- [PARAM]
byte_offset: - バイトオフセット
- [PARAM]
encoding -> EncodingRuby 3.4 から[permalink][rdoc][edit]-
ソースコードのエンコーディングを返します。
line(byte_offset) -> IntegerRuby 3.3 から[permalink][rdoc][edit]-
byte_offset の位置がある行の行番号を返します。行番号は 1 から始まります。
- [PARAM]
byte_offset: - バイトオフセット
- [PARAM]
line_end(byte_offset) -> IntegerRuby 3.4 から[permalink][rdoc][edit]-
byte_offset の位置がある行の終端のバイトオフセット(次の行の行頭と同じ位置)を返します。
- [PARAM]
byte_offset: - バイトオフセット
- [PARAM]
line_start(byte_offset) -> IntegerRuby 3.3 から[permalink][rdoc][edit]-
byte_offset の位置がある行の、行頭のバイトオフセットを返します。
- [PARAM]
byte_offset: - バイトオフセット
- [PARAM]
lines -> ArrayRuby 3.4 から[permalink][rdoc][edit]-
ソースコードを行ごと(改行を含む)に分割した配列を返します。
offsets -> ArrayRuby 3.3 から[permalink][rdoc][edit]-
各行の開始バイトオフセットの配列を返します。末尾にはソースコード全体のバイト数が入ります。
slice(byte_offset, length) -> StringRuby 3.3 から[permalink][rdoc][edit]-
byte_offset から length バイト分のソースコードを返します。
- [PARAM]
byte_offset: - 開始バイトオフセット
- [PARAM]
length: - バイト数
- [PARAM]
source -> StringRuby 3.3 から[permalink][rdoc][edit]-
ソースコード全体を文字列で返します。
start_line -> IntegerRuby 3.3 から[permalink][rdoc][edit]-
先頭行の行番号を返します。通常は 1 です。