要約
ソースコード上の範囲(開始バイトオフセットと長さ)を表すクラスです。構文木の各ノードのほか、Prism::Comment・Prism::MagicComment・
Prism::ParseError・Prism::ParseWarning・Prism::Token などの
location メソッドから得られます。
行番号・桁位置への変換や、該当範囲の文字列の取り出しなどのメソッドを持ちます。桁位置を表すメソッドには「バイト単位」(start_column など)と「文字単位」(start_character_column など)の系列があります。
require "prism"
node = Prism.parse("x = 1 + 2").value.statements.body[0]
loc = node.location
p loc.slice # => "x = 1 + 2"
p loc.start_line # => 1
p loc.start_offset # => 0
p loc.length # => 9
loc = node.value.location # 右辺の 1 + 2
p loc.slice # => "1 + 2"
p loc.start_column # => 4
目次
- インスタンスメソッド
-
- ==
- adjoin
- chop
- comments
- copy
- end_character_column
- end_character_offset
- end_code_units_column
- end_code_units_offset
- end_column
- end_line
- end_offset
- join
- leading_comments
- length
- slice
- slice_lines
- source_lines
- start_character_column
- start_character_offset
- start_code_units_column
- start_code_units_offset
- start_column
- start_line
- start_line_slice
- start_offset
- trailing_comments
インスタンスメソッド
self == other -> boolRuby 3.3 から[permalink][rdoc][edit]-
other が同じ範囲を表す
Prism::Locationであれば true を返します。- [PARAM]
other: - 比較対象のオブジェクト
- [PARAM]
adjoin(string) -> Prism::LocationRuby 3.4 から[permalink][rdoc][edit]-
範囲の直後に続くソースコードが string と一致する場合に、その分だけ範囲を伸ばした新しい
Prism::Locationを返します。- [PARAM]
string: - 取り込む文字列
- [EXCEPTION]
RuntimeError: - 範囲の直後が string と一致しない場合に発生します。
- [PARAM]
chop -> Prism::LocationRuby 3.4 から[permalink][rdoc][edit]-
末尾の 1 バイトを除いた新しい
Prism::Locationを返します。 comments -> ArrayRuby 3.3 から[permalink][rdoc][edit]-
この位置に関連付けられたコメント(Prism::Comment のサブクラスのインスタンス)の配列を返します。前に付くコメント、後ろに付くコメントの順に並びます。
コメントの関連付けは Prism::ParseResult#attach_comments! を呼び出したときに行われます。呼び出す前は空配列です。
copy(source: self.source, start_offset: self.start_offset, length: self.length) -> Prism::LocationRuby 3.3 から[permalink][rdoc][edit]-
指定した属性だけを差し替えた新しい
Prism::Locationを返します。 end_character_column -> IntegerRuby 3.3 から[permalink][rdoc][edit]-
範囲の終端位置の、行頭からの文字単位の桁位置(0 origin)を返します。
例require "prism" loc = Prism.parse('s = "あい" + x').value.statements.body[0].location p loc.end_column # => 16 (バイト単位) p loc.end_character_column # => 12 (文字単位) end_character_offset -> IntegerRuby 3.3 から[permalink][rdoc][edit]-
範囲の終端位置の、ソースコード先頭からの文字単位のオフセットを返します。
end_code_units_column(encoding = Encoding::UTF_16LE) -> IntegerRuby 3.4 から[permalink][rdoc][edit]-
範囲の終端位置の、行頭からの指定エンコーディングのコード単位での桁位置を返します。
end_code_units_offset(encoding = Encoding::UTF_16LE) -> IntegerRuby 3.4 から[permalink][rdoc][edit]-
範囲の終端位置の、指定エンコーディングのコード単位でのオフセットを返します。
end_column -> IntegerRuby 3.3 から[permalink][rdoc][edit]-
範囲の終端位置の、行頭からのバイト単位の桁位置(0 origin)を返します。
end_line -> IntegerRuby 3.3 から[permalink][rdoc][edit]-
範囲の終端位置がある行の行番号を返します。
end_offset -> IntegerRuby 3.3 から[permalink][rdoc][edit]-
範囲の終端位置(最後のバイトの次)のバイトオフセットを返します。
join(other) -> Prism::LocationRuby 3.3 から[permalink][rdoc][edit]-
自身の開始位置から other の終端位置までを表す新しい
Prism::Locationを返します。間にある文字列も範囲に含まれます。- [PARAM]
other: -
結合する
Prism::Location。自身より後ろにある必要があります。
require "prism" body = Prism.parse("foo = 1\nbar = 2\n").value.statements.body p body[0].location.join(body[1].location).slice # => "foo = 1\nbar = 2" - [PARAM]
leading_comments -> ArrayRuby 3.4 から[permalink][rdoc][edit]-
この位置の前に付くコメント(Prism::Comment のサブクラスのインスタンス)の配列を返します。 Prism::ParseResult#attach_comments! を呼び出す前は空配列です。
例require "prism" result = Prism.parse("# leading\na = 1 # trailing\n") result.attach_comments! loc = result.value.statements.body[0].location p loc.leading_comments.map { |c| c.slice } # => ["# leading"] p loc.trailing_comments.map { |c| c.slice } # => ["# trailing"] length -> IntegerRuby 3.3 から[permalink][rdoc][edit]-
範囲のバイト数を返します。
end_offset - start_offsetと同じです。 slice -> StringRuby 3.3 から[permalink][rdoc][edit]-
範囲に対応するソースコードの文字列を返します。
slice_lines -> StringRuby 3.4 から[permalink][rdoc][edit]-
範囲を含む行全体(開始行の行頭から終端行の行末まで)の文字列を返します。
source_lines -> ArrayRuby 3.4 から[permalink][rdoc][edit]-
ソースコード全体を行ごとに分割した配列を返します。
start_character_column -> IntegerRuby 3.3 から[permalink][rdoc][edit]-
範囲の開始位置の、行頭からの文字単位の桁位置(0 origin)を返します。マルチバイト文字を含む行では Prism::Location#start_column と異なる値になります。
start_character_offset -> IntegerRuby 3.3 から[permalink][rdoc][edit]-
範囲の開始位置の、ソースコード先頭からの文字単位のオフセットを返します。
start_code_units_column(encoding = Encoding::UTF_16LE) -> IntegerRuby 3.4 から[permalink][rdoc][edit]-
範囲の開始位置の、行頭からの指定エンコーディングのコード単位での桁位置を返します。
start_code_units_offset(encoding = Encoding::UTF_16LE) -> IntegerRuby 3.4 から[permalink][rdoc][edit]-
範囲の開始位置の、指定エンコーディングのコード単位でのオフセットを返します。UTF-16 のコード単位で位置をやりとりする LSP(Language Server Protocol)などとの連携向けです。
- [PARAM]
encoding: - コード単位の基準となるエンコーディング
- [PARAM]
start_column -> IntegerRuby 3.3 から[permalink][rdoc][edit]-
範囲の開始位置の、行頭からのバイト単位の桁位置(0 origin)を返します。
start_line -> IntegerRuby 3.3 から[permalink][rdoc][edit]-
範囲の開始位置がある行の行番号を返します。行番号は 1 から始まります。
start_line_slice -> StringRuby 3.3 から[permalink][rdoc][edit]-
開始位置がある行の、行頭から開始位置の直前までの文字列を返します。
例require "prism" loc = Prism.parse("x = 1").value.statements.body[0].value.location p loc.slice # => "1" p loc.start_line_slice # => "x = " start_offset -> IntegerRuby 3.3 から[permalink][rdoc][edit]-
範囲の開始位置のバイトオフセットを返します。
trailing_comments -> ArrayRuby 3.4 から[permalink][rdoc][edit]-
この位置の後ろに付くコメントの配列を返します。 Prism::ParseResult#attach_comments! を呼び出す前は空配列です。