Ruby 4.0 リファレンスマニュアル

class Prism::Source

[edit]

要約

解析対象のソースコード全体と各行の開始オフセットの表を保持し、バイトオフセットから行番号・桁位置への変換などを提供するクラスです。 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
character_column(byte_offset) -> IntegerRuby 3.3 から[permalink][rdoc][edit]

byte_offset の位置の、行頭からの文字単位の桁位置(0 origin)を返します。

[PARAM] byte_offset:
バイトオフセット
character_offset(byte_offset) -> IntegerRuby 3.3 から[permalink][rdoc][edit]

byte_offset に対応する、ソースコード先頭からの文字単位のオフセットを返します。

[PARAM] byte_offset:
バイトオフセット
code_units_column(byte_offset, encoding) -> IntegerRuby 3.4 から[permalink][rdoc][edit]

byte_offset の位置の、行頭からの指定エンコーディングのコード単位での桁位置を返します。

[PARAM] byte_offset:
バイトオフセット
[PARAM] encoding:
コード単位の基準となるエンコーディング
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:
コード単位の基準となるエンコーディング
column(byte_offset) -> IntegerRuby 3.3 から[permalink][rdoc][edit]

byte_offset の位置の、行頭からのバイト単位の桁位置(0 origin)を返します。

[PARAM] byte_offset:
バイトオフセット
encoding -> EncodingRuby 3.4 から[permalink][rdoc][edit]

ソースコードのエンコーディングを返します。

line(byte_offset) -> IntegerRuby 3.3 から[permalink][rdoc][edit]

byte_offset の位置がある行の行番号を返します。行番号は 1 から始まります。

[PARAM] byte_offset:
バイトオフセット
line_end(byte_offset) -> IntegerRuby 3.4 から[permalink][rdoc][edit]

byte_offset の位置がある行の終端のバイトオフセット(次の行の行頭と同じ位置)を返します。

[PARAM] byte_offset:
バイトオフセット
line_start(byte_offset) -> IntegerRuby 3.3 から[permalink][rdoc][edit]

byte_offset の位置がある行の、行頭のバイトオフセットを返します。

[PARAM] byte_offset:
バイトオフセット
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:
バイト数
source -> StringRuby 3.3 から[permalink][rdoc][edit]

ソースコード全体を文字列で返します。

start_line -> IntegerRuby 3.3 から[permalink][rdoc][edit]

先頭行の行番号を返します。通常は 1 です。