-
Tree-sitter 文档-21-代码导航系统(Code Navigation Systems)
代码导航系统(Code Navigation Systems)
Tree-sitter 可以结合其查询语言(query language)用于构建代码导航系统。
此类系统的一个示例是:
tree-sitter tags
命令,该命令会输出指定文件中重要语法节点的文本列表。
GitHub 的基于搜索的代码导航功能就是一个典型应用。
本文档用于说明:
如何与此类系统集成
...
2026-01-05 13:01:55 |
AST
-
Tree-sitter 文档-20-语法高亮
语法高亮
语法高亮是处理代码的应用程序中非常常见的功能。Tree-sitter 通过 tree-sitter-highlight 库内建支持语法高亮,这个库目前用于 GitHub.com 对多种语言代码进行高亮显示。你也可以使用命令行工具 tree-sitter highlight 执行语法高亮。(tree-sitter.github.io)
本文件说明 Tree-sitter 语法高亮...
2026-01-05 13:01:55 |
AST
-
Tree-sitter 文档-19-发布(Publishing)
发布(Publishing)
当你认为你的解析器已经达到稳定状态并可供用户使用时,你可以将其发布到多个注册中心。
强烈建议将 grammar 发布到以下平台:
GitHub
crates.io(Rust)
npm(JavaScript)
PyPI(Python)
这样可以使其他用户更容易发现并使用你的 grammar。 (Tree-sitter)
从开始到发...
2026-01-05 13:01:55 |
AST
-
Tree-sitter 文档-18-编写测试(Writing Tests)
编写测试(Writing Tests)
对于你在 grammar 中添加的每一条规则,都应首先创建一个测试,用于描述在解析该规则时语法树应当呈现的结构。
这些测试使用特定格式的文本文件编写,并存放在解析器根目录下的:
test/corpus/
目录中。
例如,你可以创建一个名为:
test/corpus/statements.txt
的文件,其内容包含如下测试条目:
==...
2026-01-05 13:01:55 |
AST
-
Tree-sitter 文档-17-外部扫描器(External Scanners)
外部扫描器(External Scanners)
许多编程语言中存在一些 token,其结构无法或不方便使用正则表达式描述。
例如:
Python 中的缩进(indent)与反缩进(dedent)token
Bash 与 Ruby 中的 heredoc
Ruby 中的 percent string
Tree-sitter 允许你使用 外部扫描器(external sc...
2026-01-05 13:01:55 |
AST
-
Tree-sitter 文档-16-parser 编写语法(Writing the Grammar)
编写语法(Writing the Grammar)
编写 Tree-sitter 语法需要一定的设计取舍。
对于任意一种语言,都存在无限多种上下文无关文法(CFG)可以描述它。
但要生成一个高质量的 Tree-sitter 解析器,语法必须满足两个关键特性:
结构直观
尽量符合 LR(1) 文法特性
Tree-sitter 生成的是具体语法树(Concrete Sy...
2026-01-05 13:01:55 |
AST
-
Tree-sitter 文档-15-parser 语法 DSL(The Grammar DSL)
语法 DSL(The Grammar DSL)
以下内容列出了可在 grammar.js 中用于定义语法规则的内置函数完整集合。这些函数用于描述语言的语法结构。(Tree-sitter)
符号(Symbols)
每一条语法规则都是一个 JavaScript 函数,该函数接收一个通常命名为 $ 的参数。
$.identifier
这种写法用于在规则中引用其他语法符号。
名...
2026-01-05 13:01:55 |
AST
-
Tree-sitter 文档-14-parser 开始使用(Getting Started)
开始使用(Getting Started)
依赖项(Dependencies)
要开发一个 Tree-sitter 解析器,需要安装以下两个依赖:
JavaScript 运行时
Tree-sitter 的语法(grammar)使用 JavaScript 编写,并通过 JavaScript 运行时(默认是 Node.js)进行解释。因此需要保证运行时命令(默认 nod...
2026-01-05 13:01:55 |
AST