要約
構文解析の結果得られる構文木の各ノードを表す抽象基底クラスです。
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
目次
- インスタンスメソッド
インスタンスメソッド
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_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イベントを発生させる行の位置としてマークされているかどうかを返します。ノードクラスの一覧
prism の各ノードクラス(
Prism::Nodeのサブクラス)と、そのフィールド(子ノードや値を取得するアクセサ)の名前の一覧です。 prism のconfig.yml(3.3= prism 0.19.0・3.4= 1.2.0・4.0= 1.7.0・4.1= 1.9.0)から機械的に生成しています。フィールドの構成が版によって異なるノードは、版ごとに行を分けています。各フィールドの意味は公式ドキュメントを参照してください。ノードクラス フィールド AliasGlobalVariableNodenew_name,old_name,keyword_locAliasMethodNodenew_name,old_name,keyword_locAlternationPatternNodeleft,right,operator_locAndNodeleft,right,operator_locArgumentsNodeflags,argumentsArrayNodeflags,elements,opening_loc,closing_locArrayPatternNodeconstant,requireds,rest,posts,opening_loc,closing_locAssocNodekey,value,operator_locAssocSplatNodevalue,operator_locBackReferenceReadNodenameBeginNodebegin_keyword_loc,statements,rescue_clause,else_clause,ensure_clause,end_keyword_locBlockArgumentNodeexpression,operator_locBlockLocalVariableNodenameBlockNodelocals,locals_body_index,parameters,body,opening_loc,closing_locBlockParameterNodename,name_loc,operator_locBlockParametersNodeparameters,locals,opening_loc,closing_locBreakNodearguments,keyword_locCallAndWriteNodeflags,receiver,call_operator_loc,message_loc,read_name,write_name,operator_loc,valueCallNodeflags,receiver,call_operator_loc,name,message_loc,opening_loc,arguments,closing_loc,blockCallOperatorWriteNodeflags,receiver,call_operator_loc,message_loc,read_name,write_name,operator,operator_loc,valueCallOrWriteNodeflags,receiver,call_operator_loc,message_loc,read_name,write_name,operator_loc,valueCallTargetNodeflags,receiver,call_operator_loc,name,message_locCapturePatternNodevalue,target,operator_locCaseMatchNodepredicate,conditions,consequent,case_keyword_loc,end_keyword_locCaseNodepredicate,conditions,consequent,case_keyword_loc,end_keyword_locClassNodelocals,class_keyword_loc,constant_path,inheritance_operator_loc,superclass,body,end_keyword_loc,nameClassVariableAndWriteNodename,name_loc,operator_loc,valueClassVariableOperatorWriteNodename,name_loc,operator_loc,value,operatorClassVariableOrWriteNodename,name_loc,operator_loc,valueClassVariableReadNodenameClassVariableTargetNodenameClassVariableWriteNodename,name_loc,value,operator_locConstantAndWriteNodename,name_loc,operator_loc,valueConstantOperatorWriteNodename,name_loc,operator_loc,value,operatorConstantOrWriteNodename,name_loc,operator_loc,valueConstantPathAndWriteNodetarget,operator_loc,valueConstantPathNodeparent,child,delimiter_locConstantPathOperatorWriteNodetarget,operator_loc,value,operatorConstantPathOrWriteNodetarget,operator_loc,valueConstantPathTargetNodeparent,child,delimiter_locConstantPathWriteNodetarget,operator_loc,valueConstantReadNodenameConstantTargetNodenameConstantWriteNodename,name_loc,value,operator_locDefNodename,name_loc,receiver,parameters,body,locals,locals_body_index,def_keyword_loc,operator_loc,lparen_loc,rparen_loc,equal_loc,end_keyword_locDefinedNodelparen_loc,value,rparen_loc,keyword_locElseNodeelse_keyword_loc,statements,end_keyword_locEmbeddedStatementsNodeopening_loc,statements,closing_locEmbeddedVariableNodeoperator_loc,variableEnsureNodeensure_keyword_loc,statements,end_keyword_locFalseNode(なし) FindPatternNodeconstant,left,requireds,right,opening_loc,closing_locFlipFlopNodeflags,left,right,operator_locFloatNode(なし) ForNodeindex,collection,statements,for_keyword_loc,in_keyword_loc,do_keyword_loc,end_keyword_locForwardingArgumentsNode(なし) ForwardingParameterNode(なし) ForwardingSuperNodeblockGlobalVariableAndWriteNodename,name_loc,operator_loc,valueGlobalVariableOperatorWriteNodename,name_loc,operator_loc,value,operatorGlobalVariableOrWriteNodename,name_loc,operator_loc,valueGlobalVariableReadNodenameGlobalVariableTargetNodenameGlobalVariableWriteNodename,name_loc,value,operator_locHashNodeopening_loc,elements,closing_locHashPatternNodeconstant,elements,rest,opening_loc,closing_locIfNodeif_keyword_loc,predicate,then_keyword_loc,statements,consequent,end_keyword_locImaginaryNodenumericImplicitNodevalueImplicitRestNode(なし) InNodepattern,statements,in_loc,then_locIndexAndWriteNodeflags,receiver,call_operator_loc,opening_loc,arguments,closing_loc,block,operator_loc,valueIndexOperatorWriteNodeflags,receiver,call_operator_loc,opening_loc,arguments,closing_loc,block,operator,operator_loc,valueIndexOrWriteNodeflags,receiver,call_operator_loc,opening_loc,arguments,closing_loc,block,operator_loc,valueIndexTargetNodeflags,receiver,opening_loc,arguments,closing_loc,blockInstanceVariableAndWriteNodename,name_loc,operator_loc,valueInstanceVariableOperatorWriteNodename,name_loc,operator_loc,value,operatorInstanceVariableOrWriteNodename,name_loc,operator_loc,valueInstanceVariableReadNodenameInstanceVariableTargetNodenameInstanceVariableWriteNodename,name_loc,value,operator_locIntegerNodeflagsInterpolatedMatchLastLineNodeflags,opening_loc,parts,closing_locInterpolatedRegularExpressionNodeflags,opening_loc,parts,closing_locInterpolatedStringNodeopening_loc,parts,closing_locInterpolatedSymbolNodeopening_loc,parts,closing_locInterpolatedXStringNodeopening_loc,parts,closing_locKeywordHashNodeflags,elementsKeywordRestParameterNodename,name_loc,operator_locLambdaNodelocals,locals_body_index,operator_loc,opening_loc,closing_loc,parameters,bodyLocalVariableAndWriteNodename_loc,operator_loc,value,name,depthLocalVariableOperatorWriteNodename_loc,operator_loc,value,name,operator,depthLocalVariableOrWriteNodename_loc,operator_loc,value,name,depthLocalVariableReadNodename,depthLocalVariableTargetNodename,depthLocalVariableWriteNodename,depth,name_loc,value,operator_locMatchLastLineNodeflags,opening_loc,content_loc,closing_loc,unescapedMatchPredicateNodevalue,pattern,operator_locMatchRequiredNodevalue,pattern,operator_locMatchWriteNodecall,targetsMissingNode(なし) ModuleNodelocals,module_keyword_loc,constant_path,body,end_keyword_loc,nameMultiTargetNodelefts,rest,rights,lparen_loc,rparen_locMultiWriteNodelefts,rest,rights,lparen_loc,rparen_loc,operator_loc,valueNextNodearguments,keyword_locNilNode(なし) NoKeywordsParameterNodeoperator_loc,keyword_locNumberedParametersNodemaximumNumberedReferenceReadNodenumberOptionalKeywordParameterNodename,name_loc,valueOptionalParameterNodename,name_loc,operator_loc,valueOrNodeleft,right,operator_locParametersNoderequireds,optionals,rest,posts,keywords,keyword_rest,blockParenthesesNodebody,opening_loc,closing_locPinnedExpressionNodeexpression,operator_loc,lparen_loc,rparen_locPinnedVariableNodevariable,operator_locPostExecutionNodestatements,keyword_loc,opening_loc,closing_locPreExecutionNodestatements,keyword_loc,opening_loc,closing_locProgramNodelocals,statementsRangeNodeflags,left,right,operator_locRationalNodenumericRedoNode(なし) RegularExpressionNodeflags,opening_loc,content_loc,closing_loc,unescapedRequiredKeywordParameterNodename,name_locRequiredParameterNodenameRescueModifierNodeexpression,keyword_loc,rescue_expressionRescueNodekeyword_loc,exceptions,operator_loc,reference,statements,consequentRestParameterNodename,name_loc,operator_locRetryNode(なし) ReturnNodekeyword_loc,argumentsSelfNode(なし) SingletonClassNodelocals,class_keyword_loc,operator_loc,expression,body,end_keyword_locSourceEncodingNode(なし) SourceFileNodefilepathSourceLineNode(なし) SplatNodeoperator_loc,expressionStatementsNodebodyStringNodeflags,opening_loc,content_loc,closing_loc,unescapedSuperNodekeyword_loc,lparen_loc,arguments,rparen_loc,blockSymbolNodeflags,opening_loc,value_loc,closing_loc,unescapedTrueNode(なし) UndefNodenames,keyword_locUnlessNodekeyword_loc,predicate,then_keyword_loc,statements,consequent,end_keyword_locUntilNodeflags,keyword_loc,closing_loc,predicate,statementsWhenNodekeyword_loc,conditions,statementsWhileNodeflags,keyword_loc,closing_loc,predicate,statementsXStringNodeflags,opening_loc,content_loc,closing_loc,unescapedYieldNodekeyword_loc,lparen_loc,arguments,rparen_loc pretty_print(q) -> ()Ruby 3.3 から[permalink][rdoc][edit]-
ppライブラリからの呼び出しに対応します。Prism::Node#inspect の出力を、現在のインデントレベルを保ったまま表示します。 set_newline_flag(newline_marked) -> ()Ruby 3.3 から Ruby 3.4 で削除[permalink][rdoc][edit]-
このノードの開始行にまだ印が付けられていなければ、Prism::Node#newline? が true を返すように印を付けます。
newline_markedは行番号をインデックスとする真偽値の配列です。Prism::ParseResult#mark_newlines! が構文木を巡回する際に、行ごとに最初に見つかったノードだけに印を付けるために内部で使用します。- [PARAM]
newline_marked: - 行番号をインデックスとする真偽値の配列を指定します。すでに印が付いている行には true が入っています。
[SEE_ALSO] Prism::Node#newline?
- [PARAM]
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