18 个版本

0.5.0 2024 年 5 月 4 日
0.4.3 2024 年 3 月 16 日
0.4.0 2024 年 1 月 23 日
0.3.6 2023 年 2 月 21 日
0.1.4 2022 年 3 月 4 日

#20 in 文本编辑器

Download history 1205/week @ 2024-04-22 1365/week @ 2024-04-29 1568/week @ 2024-05-06 1371/week @ 2024-05-13 1062/week @ 2024-05-20 1271/week @ 2024-05-27 1410/week @ 2024-06-03 1360/week @ 2024-06-10 1369/week @ 2024-06-17 1232/week @ 2024-06-24 1559/week @ 2024-07-01 1231/week @ 2024-07-08 1292/week @ 2024-07-15 1352/week @ 2024-07-22 1524/week @ 2024-07-29 2695/week @ 2024-08-05

7,015 每月下载量
10 钩子中使用(直接使用 8 个)

MIT 许可证

16MB
486K SLoC

C 485K SLoC // 0.0% comments Scheme 292 SLoC // 0.1% comments Rust 49 SLoC

Parse rate badge Crates.io badge NPM badge Build

tree-sitter-swift

此包含 Swift 编程语言的 tree-sitter 语法。

入门

要使用此解析器解析 Swift 代码,您希望依赖 Rust 钩子或 NPM 包。

Rust

要使用 Rust 钩子,您需要在您的 Cargo.toml 中添加以下内容

tree-sitter = "0.22.5"
tree-sitter-swift = "=0.5.0"

然后,您可以使用在此处声明的语言使用 tree-sitter 解析器

let mut parser = tree_sitter::Parser::new();
parser.set_language(tree_sitter_swift::language())?;

// ...

let tree = parser.parse(&my_source_code, None)
    .ok_or_else(|| /* error handling code */)?;

JavaScript

要从 NPM 使用此功能,您需要在 package.json 中添加类似的依赖项

"dependencies: {
  "tree-sitter-swift": "0.5.0",
  "tree-sitter": "^0.21.1"
}

您的解析器使用方法将类似于

const Parser = require("tree-sitter");
const Swift = require("tree-sitter-swift");

const parser = new Parser();
parser.setLanguage(Swift);

// ...

const tree = parser.parse(mySourceCode);

编辑语法

使用此包检查,编辑语法的常见工作流程将类似于

  1. 修改 grammar.ts
  2. 运行 npm install && npm test 以查看更改是否对现有的解析行为产生影响。默认的 npm test 目标需要安装 valgrind;如果您没有安装,并且不想安装,可以直接使用 tree-sitter test
  3. 在某个实际的 Swift 代码库上运行 tree-sitter parse 并查看是否(或在何处)失败。
  4. 使用任何失败来创建新的语料库测试用例。

贡献

欢迎所有对此存储库的贡献。

如果此类贡献是将生成的文件(例如,parser.c)检入存储库,请注意,您的贡献将不会获得接受。请确保阅读常见问题解答条目以及与此主题相关的先前 讨论妥协

在 Web Assembly 中使用 tree-sitter-swift

将 tree-sitter-swift 作为 web 绑定版 tree-sitter 的语言,这可能是比已发布的 node 模块更现代的版本。 查看。按照以下说明操作

  1. 安装 node 模块 npm install web-tree-sitter tree-sitter-swift
  2. 运行 tree-sitter 命令行工具以创建 wasm 包
    $ npx tree-sitter build-asm ./node_modules/tree-sitter
    
  3. 以这种方式启动 tree-sitter wasm。
const Parser = require("web-tree-sitter");
async function run() {
  //needs to happen first
  await Parser.init();
  //wait for the load of swift
  const Swift = await Parser.Language.load("./tree-sitter-swift.wasm");

  const parser = new Parser();
  parser.setLanguage(Swift);

  //Parse your swift code here.
  const tree = parser.parse('print("Hello, World!")');
}
//if you want to run this
run().then(console.log, console.error);

常见问题

你的 parser.c 在哪里?

此存储库当前省略了构建过程中自动生成的大部分代码。这意味着,例如,grammar.jsonparser.c 都只能在构建后才能使用。这也大大减少了 diff 中的噪音。

不提交 parser.c 的副作用是可以保证向后兼容性。tree-sitter CLI 生成的解析器并不总是向后兼容。如果您需要解析器,请使用 CLI 自行生成;进行此操作所需的所有信息都包含在此包中。通过这样做,您也可以确保您的解析器版本和库版本是兼容的。

如果您需要 parser.c,并且您不关心 tree-sitter 版本,但您没有本地设置可以获取解析器,您可以从此包中最近的 workflow 运行中下载一个。要这样做

  • 访问此存储库的 GitHub actions 页面
  • 单击适当的提交的 "发布 grammar.jsonparser.c" 操作。
  • 向下滚动到 Artifacts 并单击 generated-parser-src。所有相关的解析器文件都将可用于下载。

依赖项

~2.7–4MB
~71K SLoC