TreeSitter
Sublime Text 的 Tree-sitter 配置和抽象层
详细信息
安装次数
- 总数 401
- Win 155
- Mac 114
- Linux 132
8 月 6 日 | 8 月 5 日 | 8 月 4 日 | 8 月 3 日 | 8 月 2 日 | 8 月 1 日 | 7 月 31 日 | 7 月 30 日 | 7 月 29 日 | 7 月 28 日 | 7 月 27 日 | 7 月 26 日 | 7 月 25 日 | 7 月 24 日 | 7 月 23 日 | 7 月 22 日 | 7 月 21 日 | 7 月 20 日 | 7 月 19 日 | 7 月 18 日 | 7 月 17 日 | 7 月 16 日 | 7 月 15 日 | 7 月 14 日 | 7 月 13 日 | 7 月 12 日 | 7 月 11 日 | 7 月 10 日 | 7 月 9 日 | 7 月 8 日 | 7 月 7 日 | 7 月 6 日 | 7 月 5 日 | 7 月 4 日 | 7 月 3 日 | 7 月 2 日 | 7 月 1 日 | 6 月 30 日 | 6 月 29 日 | 6 月 28 日 | 6 月 27 日 | 6 月 26 日 | 6 月 25 日 | 6 月 24 日 | 6 月 23 日 | 6 月 22 日 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Windows | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 2 | 1 | 2 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 3 | 0 | 0 | 0 | 2 | 0 | 3 | 2 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 2 | 0 |
Mac | 1 | 2 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 2 | 1 | 0 | 1 | 1 | 0 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Linux | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 2 | 4 | 0 | 2 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 2 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 2 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
README
Sublime TreeSitter
The TreeSitter
plugin provides Sublime Text with a performant and flexible interface to Tree-sitter.
Why Tree-sitter
Tree-sitter builds a parse tree for text in any buffer, fast enough to update the tree after every keystroke. The TreeSitter
plugin has built-in commands for syntax-based selection and navigation, and for managing and debugging Tree-sitter languages and parse trees.
It also has APIs with everything you need to build Sublime Text plugins for “structural” editing, selection, navigation, code folding, symbol maps… See e.g. https://zed.rust-lang.net.cn/blog/syntax-aware-editing for ideas.
Installation
- Install
TreeSitter
from Package Control - See installed languages / install a new language with
TreeSitter: Install Language
python
,json
,javascript
,typescript
and a few others are installed by default
Overview
Sublime TreeSitter
provides commands to
- Select ancestor, descendant, sibling, or “cousin” nodes based on the current selection
- Goto symbols returned by tree queries, with symbol breadcrumbs for context
- Print the syntax tree or nodes under the current selection (e.g. for debugging)
And APIs to
- Get a node from a point or selection
- Get a Tree-sitter
Tree
by its buffer id, or get trees for all tracked buffers - Subscribe to tree changes in any buffer in real time using
sublime_plugin.EventListener
- Get a tree from a string of code
- Query a tree, walk a tree
- Other low-level APIs that power built-in commands
Usage
Here's a partial list of commands that ship with TreeSitter
. To see them all, search for TreeSitter
in the command palette.
安装语言解析器
移除语言解析器
选择祖先节点
选择兄弟节点
选择堂兄弟节点
选择子节点
选择符号
跳转到符号
打印语法树
显示选中节点下的节点
快捷键绑定
以下是选择和导航命令的一些示例快捷键绑定。
公共API
TreeSitter
导出用于构建Sublime Text插件的低级API。这些API可以在sublime_tree_sitter
包下由其他插件导入。
API源代码主要位于src/api.py
。
插件加载顺序
在你的插件中导入sublime_tree_sitter
,你有2种选择
- 给你的插件命名,使其在字母顺序中排在
TreeSitter
后面(所有的User
插件都这么做) - 在插件加载后“运行时”导入
sublime_tree_sitter
,例如这样做
import sublime_plugin
class MyTreeSitterCommand(sublime_plugin.WindowCommand):
def run(self, **kwargs):
from sublime_tree_sitter import get_tree_dict
# ...
事件监听器
插件可以订阅"tree_sitter_update_tree"
事件
import sublime_plugin
from sublime_tree_sitter import get_tree_dict
class MyTreeSitterListener(sublime_plugin.EventListener):
def on_window_command(self, window, command, args):
if command == "tree_sitter_update_tree":
print(get_tree_dict(args["buffer_id"]))
管理自己的语言仓库和二进制文件
TreeSitter
随附从tree_sitter_languages
包中预先构建的语言二进制文件。如果你要使用此包中未提供的语言或语言版本,TreeSitter
可以为你克隆语言仓库并构建二进制文件。
要启用此功能(并禁用tree_sitter_languages
包中捆绑的语言),从命令面板中选择“TreeSitter: Settings”,并将“python_path”设置为一个具有可工作的C编译器的外部Python 3.8可执行文件,以便它可以调用Language.build_library
。
如果你使用Linux或MacOS,使用pyenv是获取Python 3.8的一个简单方法。
限制
- 不支持嵌套的语法树,例如HTML文档中
<script>
标签内的JS代码 - 仅支持ASCII / UTF-8编码的源代码(Tree-sitter还支持UTF-16)
许可协议
MIT.