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

module Ruby::Prism

[edit]

要約

インタプリタに組み込まれた prism パーサを提供するモジュールです。 Ruby 4.1 で導入されました。[bug#22379]

実行中のプログラムを解析したパーサそのものを使って、Ruby プログラムを解析できます。 prism の Prism モジュールとは独立していて、API は同じ構成です。たとえば Ruby::Prism.parse は Prism?.parse に対応します。このページには各メソッドのエントリを置いていません。メソッドの詳細は prism のエントリを参照してください。

構文木のノードは Ruby::Prism::Node のサブクラスです。ノードに共通の API は Prism::Node と同じです。

このモジュールは、最初に参照したときに自動的に読み込まれます。require "ruby/prism" で明示的に読み込むこともできます。

Ruby::Prism::VERSION で、組み込まれている prism のバージョンが分かります。

API は Ruby の minor バージョン間で変わる可能性があります。実行中のインタプリタのパーサが必要な場合以外は、prism を使ってください。

Method#syntax_tree・UnboundMethod#syntax_tree・Proc#syntax_tree・Thread::Backtrace::Location#syntax_tree・RubyVM::InstructionSequence#syntax_tree は、このモジュールのノードを返します。 require "prism" した prism gem の Prism とは別のモジュールで、ノードのクラスも別です。

例
result = Ruby::Prism.parse("def m = 1")
p result.class                          # => Ruby::Prism::ParseResult
p result.value.class                    # => Ruby::Prism::ProgramNode
node = result.value.statements.body.first
p node.class                            # => Ruby::Prism::DefNode
p node.slice                            # => "def m = 1"

def m; end
p method(:m).syntax_tree.class          # => Ruby::Prism::DefNode

require "prism"
p Prism.equal?(Ruby::Prism)             # => false
p -> { 42 }.syntax_tree.is_a?(Prism::LambdaNode)       # => false
p -> { 42 }.syntax_tree.is_a?(Ruby::Prism::LambdaNode) # => true

目次