要約
構文解析の結果得られる構文木の各ノードを表す抽象基底クラスです。
Prism.#parse などが返す構文木は、このクラスのサブクラス
(150 種類以上)のインスタンスで構成されます。Prism::Node 自身のインスタンスが生成されることはありません。
個々のノードクラス(Prism::ProgramNode・Prism::CallNode など)に固有のフィールド(子ノードや値を取得するアクセサ)はこのリファレンスでは扱いません。このページで扱うのは、すべてのノードクラスに共通する
API です。個々のノードクラスの詳細は公式ドキュメントを参照してください。
- プロジェクトページ: https://github.com/ruby/prism
- リファレンス(YARD): https://www.rubydoc.info/gems/prism
- ドキュメントサイト: https://ruby.github.io/prism/
require "prism"
node = Prism.parse("1 + 2").value
p node.type # => :program_node
p node.class # => Prism::ProgramNode
p node.location.slice # => "1 + 2"
call = node.statements.body[0]
p call.type # => :call_node
p call.child_nodes.size # => 3
p call.compact_child_nodes.size # => 2
[SEE_ALSO] Prism::ParseResult, Prism::Location
目次
- 特異メソッド
- インスタンスメソッド
特異メソッド
type -> SymbolRuby 3.3 から[permalink][rdoc][edit]-
Prism::Node#type のクラスメソッド版です。インスタンスを作らずにノードクラス自体からノードの種類を表すシンボルを得られます。
インスタンスメソッド
accept(visitor) -> objectRuby 3.3 から[permalink][rdoc][edit]-
Visitor パターンの受け入れメソッドです。ノードの種類に応じた
visitor.visit_xxxを呼び出し、その戻り値を返します。- [PARAM]
visitor: -
Prism::Visitor(またはそのサブクラス)のインスタンスを指定します。
- [PARAM]
child_nodes -> [Prism::Node | nil]Ruby 3.3 から[permalink][rdoc][edit]-
子ノードの配列を返します。存在しないオプショナルな子ノードの位置には nil が入ります。
[SEE_ALSO] Prism::Node#compact_child_nodes
comment_targets -> [Prism::Node | Prism::Location]Ruby 3.3 から[permalink][rdoc][edit]-
コメントの関連付け先になりうる子ノードや位置情報の配列を返します。 Prism::ParseResult#attach_comments! が内部で使用します。
compact_child_nodes -> [Prism::Node]Ruby 3.3 から[permalink][rdoc][edit]-
子ノードの配列を返します。Prism::Node#child_nodes と異なり、存在しないオプショナルな子ノードは含まれません(nil を含みません)。
copy(**params) -> Prism::NodeRuby 3.3 から[permalink][rdoc][edit]-
自身と同じクラスの新しいノードを、指定したフィールドだけを差し替えて複製します。渡せるキーワードはノードクラスごとのフィールド名で、指定しなかったフィールドは自身の値を引き継ぎます。
例require "prism" call = Prism.parse("1 + 2").value.statements.body[0] copied = call.copy p copied.class # => Prism::CallNode p copied.equal?(call) # => false deconstruct -> [Prism::Node | nil]Ruby 3.3 から[permalink][rdoc][edit]-
Prism::Node#child_nodes のエイリアスです。パターンマッチの配列パターン(
case node; in [a, b])で使われます。 deconstruct_keys(keys) -> HashRuby 3.3 から[permalink][rdoc][edit]-
パターンマッチのハッシュパターン(
case node; in {value:})で使われます。ノードの各フィールドをキーに持つハッシュを返します。- [PARAM]
keys: - 取り出したいキーの配列。すべて取り出す場合は nil を指定します。
- [PARAM]
inspect(inspector = NodeInspector.new) -> StringRuby 3.3 から[permalink][rdoc][edit]-
構文木をツリー形式で表した、人間が読みやすい文字列を返します。
例inspectorは内部実装用の引数なので、通常は省略してください。require "prism" puts Prism.parse("1 + 2").value.inspect location -> Prism::LocationRuby 3.3 から[permalink][rdoc][edit]-
ノードのソースコード上の位置を表す Prism::Location を返します。
newline? -> boolRuby 3.3 から[permalink][rdoc][edit]-
このノードが、TracePoint の
:lineイベントを発生させる行の位置としてマークされているかどうかを返します。 pretty_print(q) -> ()Ruby 3.3 から[permalink][rdoc][edit]-
ppライブラリからの呼び出しに対応します。Prism::Node#inspect の出力を、現在のインデントレベルを保ったまま表示します。 slice -> StringRuby 3.3 から[permalink][rdoc][edit]-
ノードの位置に対応するソースコードの文字列を返します。
location.sliceと同じです。 to_dot -> StringRuby 3.3 から[permalink][rdoc][edit]-
構文木を Graphviz の DOT 言語形式の文字列に変換します。
例require "prism" dot = Prism.parse("1 + 2").value.to_dot p dot.start_with?("digraph") # => true type -> SymbolRuby 3.3 から[permalink][rdoc][edit]-
ノードの種類を表すシンボル(例
:program_node、:call_node)を返します。case 式や配列との比較でノードの種類を判定するときに使えます。