singleton method RubyVM::AbstractSyntaxTree.of

of(proc) -> RubyVM::AbstractSyntaxTree::Node[permalink][rdoc][edit]
of(proc, keep_script_lines: false, error_tolerant: false, keep_tokens: false) -> RubyVM::AbstractSyntaxTree::Node

引数 proc に渡したProcやメソッドオブジェクトの抽象構文木を返します。

このメソッドはProcやメソッドが定義されたファイルを読み込む必要があるため、 irbのようなファイルを介さない対話的環境では動作しません。

[PARAM] proc:
Procもしくはメソッドオブジェクトを指定します。
[PARAM] keep_script_lines:
true を指定すると、 Node#script_lines でノードと関連づけられたソースコードのテキストを取得できます。
[PARAM] keep_tokens:
true を指定すると、 Node#token が利用できます。
[PARAM] error_tolerant:
true を指定すると、構文エラーが発生した際にエラー箇所を type が :ERROR であるようなノードに置き換えてツリーを生成します。

pp RubyVM::AbstractSyntaxTree.of(proc {1 + 2})
# => (SCOPE@2:38-2:45
#     tbl: []
#     args: nil
#     body:
#       (OPCALL@2:39-2:44 (LIT@2:39-2:40 1) :+
#          (LIST@2:43-2:44 (LIT@2:43-2:44 2) nil)))

def hello
  puts "hello, world"
end

pp RubyVM::AbstractSyntaxTree.of(method(:hello))
# => (SCOPE@5:0-7:3
#     tbl: []
#     args:
#       (ARGS@5:9-5:9
#        pre_num: 0
#        pre_init: nil
#        opt: nil
#        first_post: nil
#        post_num: 0
#        post_init: nil
#        rest: nil
#        kw: nil
#        kwrest: nil
#        block: nil)
#     body:
#       (FCALL@6:2-6:21 :puts (LIST@6:7-6:21 (STR@6:7-6:21 "hello, world") nil)))