Next: , Previous: , Up: プログラムソースの解析   [Contents][Index]


37.4 ノード情報へのアクセス

ノードの基本的な情報

すべてのノードはパーサーに関連付けられていて、そのパーサーが関連付けられているのがバッファーです。以下はそれらを取得する関数です。

Function: treesit-node-parser node

この関数はnodeに関連付けられているパーサーをリターンする。

Function: treesit-node-buffer node

この関数はnodeのパーサーに関連付けられているバッファーをリターンする。

Function: treesit-node-language node

この関数はnodeに関連付けられている言語をリターンする。

それぞれのノードはバッファー内のテキストのある範囲を表しています。そのテキストに関する情報を探すのが以下の関数です。

Function: treesit-node-start node

nodeの開始位置をリターンする。

Function: treesit-node-end node

nodeの終了位置をリターンする。

Function: treesit-node-text node &optional object

nodeが表しているバッファーテキストを文字列としてリターンする(nodeが文字列をパースすることによって取得されたものであれば、その文字列のテキストをリターンする)。

以下はtree-sitterのノード用の述語の一部です:

Function: treesit-node-p object

objectがtree-sitterの構文ノードかをチェックする。

Function: treesit-node-eq node1 node2

tree-sitterの構文ツリーにおいてnode1node2が同じノードを参照しているかをチェックする。この関数はequalと等価なメトリックを用いる。equalを使用してノードを比較することも可能(同等性のための述語を参照)。

プロパティ情報

具体的な構文ツリーにおけるノードは一般的に名前つきノード(named nodes)無名ノード(anonymous nodes)という2つのカテゴリーに大別されます。あるノードが名前つきか、それとも無名なのかは言語グラマーによって判断されます(named nodeを参照)。

ノードが名前つきか、あるいは無名かというプロパティに加えて、ノードは他のプロパティをもつことができます。ノードが“欠落(missing)”していることもあり得ます。このようなノードは特定の類の構文エラー(たとえばグラマーに照らせば恐らくそこにあるべき何らかが存在しない)から復帰するためにパーサーによって挿入されます。これはプログラムソースの編集中において、そのソースがまだ最終形になっていないときに発生し得るエラーです。

“余分(extra)”というノードもあります。このようなノードはテキスト内の任意の場所に出現し得る、コメントのようなオブジェクトを表しています。

パーサーがノードを作成した後に少なくとも1回再パースされた場合には、“期限切れ(outdated)”のノードになることがあります。

ノードが跨ぐテキストに構文エラーが含まれていれば、“エラーあり(has error)”のノードです。ノード自体にエラーがあったり、子孫のいずれかのノードにエラーがあるのかもしれません。

ノードはそのノードのパーサーが削除されておらず、更にそのノードが生きているバッファー(バッファーのkillを参照)であれば生きている(live)とみなされます。

Function: treesit-node-check node property

この関数はnodeが指定されたpropertyをもっていれば非nilをリターンする。propertynamedmissingextraoutdatedhas-errorliveのいずれか。

Function: treesit-node-type node

名前つきノードは“タイプ(type)”をもつことができる(node typeを参照)。たとえば名前つきノードstring_literalのタイプをstring_literalにすることができる。無名ノードは、単にそのノードが表すテキストがタイプとなる(たとえば‘,’ノードのタイプは単に‘,’)。

この関数はnodeのタイプを文字列としてリターンする。

子や親としての情報

Function: treesit-node-index node &optional named

この関数は親からnodeを子ノードとして見た場合のインデックスをリターンする。namedが非nilの場合には名前つきノードだけを考慮する(named nodeを参照)。

Function: treesit-node-field-name node

親をもつ子ノードはフィールド名をもつことができる(field nameを参照)。この関数は親からnodeを子ノードとして見た場合のフィールド名をリターンする。

Function: treesit-node-field-name-for-child node n

この関数はnoden番目の子のフィールド名をリターンする。n番目の子がいない、またはn番目の子にフィールド名がなければnilをリターンする。

nは名前つきの子と無名の子の両方を考慮することに注意。またnは負でもよい(-1は最後の子を表す)。

Function: treesit-node-child-count node &optional named

この関数はnodeの子の数をリターンする。namedが非nilの場合には名前つきの子だけを考慮する(named nodeを参照)。