是不是全文解析取决于使用者,我这里介绍几个 api
- 创建一个 parser,比如 html 的。
(require 'tree-sitter)
;;; 下面三个都是创建一个 parser
;;; 创建一个 parser,已经有的话,返回现成的
(tree-sitter-get-parser-create 'tree-sitter-html)
;;; 总是创建一个新的 parser
(tree-sitter-get-parser 'tree-sitter-html)
;;; 给某个 buffer 创建 parser,第一个参数为 nil 的话,默认当前 buffer
(tree-sitter-parser-create nil 'tree-sitter-html)
;;; 或者保存在一个变量里
(setq-local tree-sitter-html (tree-sitter-parser-create nil 'tree-sitter-html))
- 进行解析,是否解析,什么时候解析都取决于使用者,buffer 变动的时候 treesitter 是不会自动更新的,当然,你可以自己设置。
tree-sitter-node-at beg &optional end parser-or-lang named
(tree-sitter-node-at (point))
;;;解析当前位置的这个节点,默认调用已经定义的 parser,beg、 end 是解析的范围, parser-or-lang 是调用的 parser,即你可以在一个 buffer 调用多个 parser, named 就是一个节点的名字(在语法树里的名字)
(tree-sitter-node-at (point) (point) (tree-sitter-get-parser-create 'tree-sitter-javascript))
;;; 在当前节点调用 javascript 的 parser
(tree-sitter-parser-root-node tree-sitter-html)
;;;解析整个文档
tree-sitter-parse-string string language
;;; 解析一个字符串
其他的后面再补,文档我还没有看完…