syntax_tree -> Ruby::Prism::Node | RubyVM::AbstractSyntaxTree::Node | nilRuby 4.1 から[permalink][rdoc][edit]-
selfのコンパイル元になった抽象構文木(AST)のノードを、コンパイルに使ったのと同じパーサでソースを再度パースし直すことで返します。デフォルトの prism でコンパイルされていれば Ruby::Prism のノード(
Ruby::Prism::Nodeのサブクラス)を、parse.yでコンパイルされていれば RubyVM::AbstractSyntaxTree::Node を返します。以下のように、ノードを確実に取得できない場合は nil を返します。
- ソースを利用できない場合(文字列からコンパイルした場合や、
RubyVM.keep_script_linesを有効にせずに eval したコードなど) - コンパイルしたあとにソースファイルが変更されている場合
返されるノードは prism gem のノードではなく、インタプリタに組み込まれた Ruby::Prism のノードです。そのため、インストールされている prism gem のバージョンにかかわらず、返される構文木は実行中のコードに対応します。
このメソッドは実験的なもので、予告なく変更される可能性があります。
例# /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
- ソースを利用できない場合(文字列からコンパイルした場合や、