每个节点都关联一个解析器,而该解析器又关联一个缓冲区。以下函数用于获取它们。
该函数返回 node 关联的解析器。
该函数返回 node 对应的解析器所关联的缓冲区。
该函数返回 node 对应的解析器所关联的语言。
每个节点都代表缓冲区中的一段文本。以下函数用于查找该文本的相关信息。
返回 node 的起始位置。
返回 node 的结束位置。
以字符串形式返回 node 所代表的缓冲区文本。(如果 node 是通过解析字符串获取的,则返回该字符串中的对应文本。)
以下是针对 tree-sitter 节点的谓词函数:
检查 object 是否为 tree-sitter 语法节点。
检查 node1 和 node2 是否指向 tree-sitter 语法树中的同一个节点。该函数使用与 equal 相同的等价判定标准。你也可以使用 equal 直接比较节点(see 相等性谓词)。
通常,具体语法树中的节点分为两类:具名节点(named nodes) 和 匿名节点(anonymous nodes)。节点是具名还是匿名由语言语法决定(see named node)。
除了具名或匿名之外,节点还可以拥有其他属性。 节点可以是 “缺失(missing)” 的:这类节点由解析器自动插入,用于从某些语法错误中恢复解析,即按照语法规则本应存在但实际缺失的内容。这种情况通常出现在程序源码编辑过程中,此时源码尚未完成最终编写。
节点可以是 “额外(extra)” 的:这类节点代表注释等可以出现在文本任意位置的内容。
如果节点创建后,其对应的解析器重新解析过至少一次,该节点即为 “过期(outdated)”节点。
如果节点覆盖的文本包含语法错误,则该节点 “包含错误”。可能是节点自身存在错误,也可能是其某个子节点存在错误。
如果节点对应的解析器未被删除,且其所属的缓冲区为活跃缓冲区,则该节点被视为 活跃(live) 节点(see 杀死缓冲区)。
如果 node 拥有指定的 property,该函数返回非 nil 值。property 可以是 named、missing、extra、outdated、has-error 或 live。
具名节点拥有 “类型(types)”(see node type)。例如,一个具名节点可以是 string_literal 节点,其中 string_literal 就是它的类型。匿名节点的类型就是其代表的文本本身;例如,‘,’ 节点的类型就是 ‘,’。
该函数以字符串形式返回 node 的类型。
该函数返回 node 作为其父节点子节点的索引。如果 named 为非 nil 值,则仅统计具名节点(see named node)。
父节点的子节点可以拥有字段名(see field name)。该函数返回 node 作为其父节点子节点的字段名。
该函数返回 node 的第 n 个子节点的字段名。如果不存在第 n 个子节点,或第 n 个子节点没有字段名,则返回 nil。
注意:n 同时统计具名和匿名子节点,且 n 可以为负数,例如 −1 代表最后一个子节点。
该函数返回 node 的子节点数量。如果 named 为非 nil 值,则仅统计具名子节点(see named node)。
如果 smaller 被包含在 larger 中,该函数返回非 nil 值。smaller 和 larger 可以是 cons 对 (beg . end),也可以是节点。
判定规则:larger 的起始位置 <= smaller 的起始位置,且 larger 的结束位置 <= smaller 的结束位置时返回非 nil。
如果 strict 为 t,则使用 < 而非 <= 进行比较。
如果 strict 为 partial,则只要至少一侧严格包含,就认为 larger 包含 smaller。