- 通过现有节点查询其他节点
;;; tree-sitter-node-parent node
;;; 查询当前节点的父节点
(tree-sitter-node-parent (tree-sitter-node-at (point)))
;;;tree-sitter-node-child node n &optional named
;;; 查询孩子节点
(tree-sitter-node-child (tree-sitter-node-at (point-at-bol) (point-at-eol)) 1)
;;; tree-sitter-node-children node &optional named
;;; 所有的孩子节点以列表的形式返回
(tree-sitter-node-children (tree-sitter-node-at (point-at-bol) (point-at-eol)))
;;;tree-sitter-next-sibling node &optional named
;;;tree-sitter-prev-sibling node &optional named
;;; 查询前后兄弟节点
- 节点有了,现在查看节点的具体信息
;;; 节点的开始位置
(tree-sitter-node-start (tree-sitter-node-at (point)))
;;; 节点的结束位置
(tree-sitter-node-end (tree-sitter-node-at (point)))
;;; 节点的内容
(tree-sitter-node-text (tree-sitter-node-at (point)))
;;; 返回 node 的类型
(tree-sitter-node-type (tree-sitter-node-at (point)))
- 下面在介绍一下 tree-sitter 处理多语言,相关 api 有好几个,我稍微介绍一个:
;;; tree-sitter-parser-set-included-ranges parser ranges
;;; ranges 的形式为由 (BEG . END) 组成的 list
;;; 例子:
(tree-sitter-parser-set-included-ranges
parser '((1 . 9) (16 . 24) (24 . 25)))
tree-sitter 的 api 非常的丰富,我上面的只是其中的一小部分,各种查询,验证,模式查询什么的应有尽有,我目前了解的还是比较浅的,具体的可以自己去看看。