すべてのノードはパーサーに関連付けられていて、そのパーサーが関連付けられているのがバッファーです。以下はそれらを取得する関数です。
この関数はnodeに関連付けられているパーサーをリターンする。
この関数はnodeのパーサーに関連付けられているバッファーをリターンする。
この関数はnodeに関連付けられている言語をリターンする。
それぞれのノードはバッファー内のテキストのある範囲を表しています。そのテキストに関する情報を探すのが以下の関数です。
nodeの開始位置をリターンする。
nodeの終了位置をリターンする。
nodeが表しているバッファーテキストを文字列としてリターンする(nodeが文字列をパースすることによって取得されたものであれば、その文字列のテキストをリターンする)。
以下はtree-sitterのノード用の述語の一部です:
objectがtree-sitterの構文ノードかをチェックする。
tree-sitterの構文ツリーにおいてnode1とnode2が同じノードを参照しているかをチェックする。この関数はequal
と等価なメトリックを用いる。equal
を使用してノードを比較することも可能(同等性のための述語を参照)。
具体的な構文ツリーにおけるノードは一般的に名前つきノード(named nodes)と無名ノード(anonymous nodes)という2つのカテゴリーに大別されます。あるノードが名前つきか、それとも無名なのかは言語グラマーによって判断されます(named nodeを参照)。
ノードが名前つきか、あるいは無名かというプロパティに加えて、ノードは他のプロパティをもつことができます。ノードが“欠落(missing)”していることもあり得ます。このようなノードは特定の類の構文エラー(たとえばグラマーに照らせば恐らくそこにあるべき何らかが存在しない)から復帰するためにパーサーによって挿入されます。これはプログラムソースの編集中において、そのソースがまだ最終形になっていないときに発生し得るエラーです。
“余分(extra)”というノードもあります。このようなノードはテキスト内の任意の場所に出現し得る、コメントのようなオブジェクトを表しています。
パーサーがノードを作成した後に少なくとも1回再パースされた場合には、“期限切れ(outdated)”のノードになることがあります。
ノードが跨ぐテキストに構文エラーが含まれていれば、“エラーあり(has error)”のノードです。ノード自体にエラーがあったり、子孫のいずれかのノードにエラーがあるのかもしれません。
ノードはそのノードのパーサーが削除されておらず、更にそのノードが生きているバッファー(バッファーのkillを参照)であれば生きている(live)とみなされます。
この関数はnodeが指定されたpropertyをもっていれば非nil
をリターンする。propertyはnamed
、missing
、extra
、outdated
、has-error
、live
のいずれか。
名前つきノードは“タイプ(type)”をもつことができる(node
typeを参照)。たとえば名前つきノードstring_literal
のタイプをstring_literal
にすることができる。無名ノードは、単にそのノードが表すテキストがタイプとなる(たとえば‘,’ノードのタイプは単に‘,’)。
この関数はnodeのタイプを文字列としてリターンする。
この関数は親からnodeを子ノードとして見た場合のインデックスをリターンする。namedが非nil
の場合には名前つきノードだけを考慮する(named nodeを参照)。
親をもつ子ノードはフィールド名をもつことができる(field nameを参照)。この関数は親からnodeを子ノードとして見た場合のフィールド名をリターンする。
この関数はnodeのn番目の子のフィールド名をリターンする。n番目の子がいない、またはn番目の子にフィールド名がなければnil
をリターンする。
nは名前つきの子と無名の子の両方を考慮することに注意。またnは負でもよい(−1は最後の子を表す)。
この関数はnodeの子の数をリターンする。namedが非nil
の場合には名前つきの子だけを考慮する(named nodeを参照)。
この関数はsmallerがlargerに囲まれていれば非nil
をリターンする。smallerとlargerは(beg
. end)
のようなコンス、あるいはノードのいずれか。
largerの開始がsmallerの開始以下、かつlargerの終端がsmallerの終端以下なら非nil
をリターンする。
strictがt
なら以下(<=)ではなくより小さい(<)で比較する。
strictがpartial
なら少なくとも一端が厳密に囲われている場合にはsmallerがlargerに囲まれているとみなす。