syntax_tree -> Prism::Node | RubyVM::AbstractSyntaxTree::Node | nilRuby 4.1 から[permalink][rdoc][edit]-
selfのコンパイル元になった抽象構文木(AST)のノードを、コンパイルに使ったのと同じパーサでソースを再度パースし直すことで返します。デフォルトの prism でコンパイルされていれば Prism::Node を、
parse.yでコンパイルされていれば RubyVM::AbstractSyntaxTree::Node を返します。以下のように、ノードを確実に取得できない場合は nil を返します。
- ソースを利用できない場合(文字列からコンパイルした場合や、
RubyVM.keep_script_linesを有効にせずに eval したコードなど) - コンパイルしたあとにソースファイルが変更されている場合
デフォルトの prism gem 以外の prism gem が読み込まれていると、
$VERBOSEが真のときに警告が出力されます。この場合、読み込まれている prism がコンパイル時に使われたパーサと異なる解釈をする可能性があるため、返されるノードが実際に実行されたコードと対応しないことがあります。このメソッドは実験的なもので、予告なく変更される可能性があります。
例# /tmp/hello.rb puts "hello, world" iseq = RubyVM::InstructionSequence.compile_file("/tmp/hello.rb") p iseq.syntax_tree.type # => :program_node # 文字列からコンパイルした場合はソースを再度読み込めないので nil p RubyVM::InstructionSequence.compile("1 + 2").syntax_tree # => nil[SEE_ALSO] RubyVM::InstructionSequence#node_id, RubyVM::InstructionSequence#source_hash, Proc#syntax_tree
- ソースを利用できない場合(文字列からコンパイルした場合や、