什么是tree-sitter & 为什么选择 tree-sitter
tree-sitter是一个C语言编写的代码解析工具,简单来说就是把一个代码片段,解析成一个树结构,通过父节点、子节点的层级关系来展现代码的层级关系,比如一个函数体 -> 函数体中的一句变量声明,通过子节点、兄弟节点的同级关系来展现代码中并列同一层级的结构。因此,我们可以从tree-sitter解析出的树上(Abstract Syntax Tree简称AST)取某个节点,它就是一个完整的片段,比如取一个花括号包裹的函数体、取一个if语句、取一个while循环…,这比基于正则表达式或其他字符串处理策略去获取函数片段(在代码生成RAG的方案中经常看到的code snippet)会方便得多。
tree-sitter的支持非常广,基本上可以解析任何编程语言,并且也非常快,即便对于有语法错误的代码片段也能完成解析,鲁棒性高,因为是纯C语言编写的,基本也没有什么依赖,所以一直是很多RAG代码生成方案所选择的代码片段化工具,比如TabbyML(一个开源的对标copilot的插件产品,能够和开源的代码生成模型结合使用)
tree-sitter如何使用
因为tree-sitter是C编写的,其他语言比如Python通常会使用python bindings的方式使用这样的C语言工具包中的函数(language bindings可以理解为,有一些这个语言内置的库,可以把python里的数据结构转换为目标工具库语言的数据结构,这样就可以传参传进那些函数里),同时,这样的其它语言的库使用时要load进python程序中&#