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

class Prism::Node

[edit]

要約

構文解析の結果得られる構文木の各ノードを表す抽象基底クラスです。 Prism.#parse などが返す構文木は、このクラスのサブクラス (150 種類以上)のインスタンスで構成されます。Prism::Node 自身のインスタンスが生成されることはありません。

個々のノードクラス(Prism::ProgramNodePrism::CallNode など)に固有のフィールド(子ノードや値を取得するアクセサ)はこのリファレンスでは扱いません。このページで扱うのは、すべてのノードクラスに共通する API です。個々のノードクラスの詳細は公式ドキュメントを参照してください。

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 (またはそのサブクラス)のインスタンスを指定します。
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 を指定します。
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 式や配列との比較でノードの種類を判定するときに使えます。