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

class Prism::ParseResult

[edit]

要約

Prism?.parsePrism?.parse_file などの戻り値のクラスです。構文解析によって得られた構文木そのものに加えて、解析中に見つかったコメント・マジックコメント・エラー・警告などの付随情報をまとめて保持します。

[SEE_ALSO] Prism?.parse, Prism?.parse_file, Prism

目次

インスタンスメソッド

継承しているメソッド

Prism::Resultから継承しているメソッド

インスタンスメソッド

attach_comments! -> ArrayRuby 3.3 から[permalink][rdoc][edit]

Prism::ParseResult#comments の各コメントを、前後の位置関係から構文木の各ノードの位置情報(Prism::Location)に関連付けます。関連付けた結果は Prism::Location#leading_commentsPrism::Location#trailing_commentsPrism::Location#comments で参照できます。

戻り値は Prism::ParseResult#comments と同じ配列です。

require "prism"

result = Prism.parse("# leading\na = 1\n")
result.attach_comments!
loc = result.value.statements.body[0].location
p loc.comments.map { |c| c.location.slice } # => ["# leading"]
comments -> ArrayRuby 3.3 から[permalink][rdoc][edit]

構文解析中に見つかったコメント(Prism::Comment のサブクラスのインスタンス)の配列を返します。Prism?.parse_comments を呼び出した場合と同じ内容です。

require "prism"

comments = Prism.parse("# hello\n1 + 1").comments
p comments.size                  # => 1
p comments.first.class           # => Prism::InlineComment
p comments.first.location.slice  # => "# hello"

[SEE_ALSO] Prism?.parse_comments

data_loc -> Prism::Location | nilRuby 3.3 から[permalink][rdoc][edit]

ソースコード中に __END__ 行が存在する場合、その行からファイル末尾までの範囲を表す Prism::Location を返します。__END__ 以降の内容は組み込み定数 DATA に読み込まれる部分に対応します。__END__ が存在しない場合は nil を返します。

require "prism"

result = Prism.parse(<<~RUBY)
  puts "hi"
  __END__
  some data here
RUBY
p result.data_loc.class
# => Prism::Location
p result.data_loc.slice
# => "__END__\nsome data here\n"

p Prism.parse("puts 1").data_loc # => nil
errors -> ArrayRuby 3.3 から[permalink][rdoc][edit]

構文解析中に発生したエラー(Prism::ParseError のインスタンス)の配列を返します。エラーがなければ空配列です。

require "prism"

errors = Prism.parse('"unterminated').errors
p errors.size            # => 1
p errors.first.class     # => Prism::ParseError
p errors.first.message   # => "unterminated string meets end of file"
p errors.first.level     # => :syntax

[SEE_ALSO] Prism::ParseResult#success?, Prism::ParseResult#warnings

errors_format -> StringRuby 3.4 から[permalink][rdoc][edit]

ソースコードに Prism::ParseResult#errors の位置(^~ の下線)とエラーメッセージの注釈を付けた、人間が読みやすい形式の文字列を返します。構文エラーの内容をまとめて表示したいときに使えます。

failure? -> boolRuby 3.3 から[permalink][rdoc][edit]

Prism::ParseResult#success? の否定です。構文解析にエラーがあった場合に true を返します。

require "prism"

p Prism.parse("1 + 1").failure? # => false
p Prism.parse("1 +").failure?   # => true

[SEE_ALSO] Prism::ParseResult#success?

magic_comments -> ArrayRuby 3.3 から[permalink][rdoc][edit]

構文解析中に見つかったマジックコメント(Prism::MagicComment のインスタンス)の配列を返します。# frozen_string_literal: true のような、Ruby の動作に影響を与える特別な形式のコメントが対象です。各要素は key(項目名)と value(値)を持ちます。

require "prism"

result = Prism.parse(<<~RUBY)
  # frozen_string_literal: true
  puts "hi"
RUBY
p result.magic_comments.size        # => 1
p result.magic_comments.first.key   # => "frozen_string_literal"
p result.magic_comments.first.value # => "true"
source -> Prism::SourceRuby 3.3 から[permalink][rdoc][edit]

解析したソースコードそのものを表す Prism::Source のインスタンスを返します。バイトオフセットから行番号・桁位置を求めるなど、位置情報を扱うための補助的なメソッドを持ちます。

実際にはサブクラス Prism::ASCIISource のインスタンスの場合があります。

require "prism"

result = Prism.parse("1 + 2")
p result.source.is_a?(Prism::Source) # => true
success? -> boolRuby 3.3 から[permalink][rdoc][edit]

構文解析にエラーがなかった場合に true を返します。 Prism::ParseResult#errors が空かどうかで判定されます。

require "prism"

p Prism.parse("1 + 1").success? # => true
p Prism.parse("1 +").success?   # => false

[SEE_ALSO] Prism::ParseResult#failure?, Prism::ParseResult#errors

value -> Prism::ProgramNodeRuby 3.3 から[permalink][rdoc][edit]

構文解析によって得られた構文木のルートノードを返します。 Prism?.parsePrism?.parse_file の戻り値として得られる Prism::ParseResult では、これは常に Prism::ProgramNode (Prism::Node のサブクラス)のインスタンスです。

構文エラーがあった場合でも nil にはならず、prism が構築できた範囲の構文木が返ります。エラーの有無は Prism::ParseResult#success? で確認してください。

require "prism"

result = Prism.parse("1 + 2")
p result.value.class # => Prism::ProgramNode

result = Prism.parse("1 +")
p result.value.class # => Prism::ProgramNode (エラーがあっても構文木は返る)
warnings -> ArrayRuby 3.3 から[permalink][rdoc][edit]

構文解析中に発生した警告(Prism::ParseWarning のインスタンス)の配列を返します。警告がなければ空配列です。

require "prism"

warnings = Prism.parse("1 + 2").warnings
p warnings.size           # => 1
p warnings.first.class    # => Prism::ParseWarning
p warnings.first.message
# => "possibly useless use of + in void context"
p warnings.first.level    # => :verbose

[SEE_ALSO] Prism::ParseResult#errors