要約
Prism?.parse や Prism?.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_comments・ Prism::Location#trailing_comments・Prism::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?.parse や Prism?.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