ctrl+shift+p filters: :st2 :st3 :win :osx :linux
浏览

TreeSitter

kylebebak ST4

Sublime Text 的 Tree-sitter 配置和抽象层

详细信息

  • 1.7.0
  • github.com
  • github.com
  • 3 个月前
  • 39 分钟前
  • 6 个月前

安装次数

  • 总数 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

源代码
raw.githubusercontent.com

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.