#typst #formatter #language #anything #output #testing #name

bin+lib typstfmt

即将为 typst 语言提供的格式化工具

1 个不稳定版本

0.1.0 2023 年 7 月 15 日

#1554开发工具

MIT/Apache

38KB
743

该包以空 Typst 的形式发布到 crates.io,主要是为了保留名称,以便 typst 开发者未来想要使用(并且他们随时可以使用这个名称)。这意味着这个格式化工具可能会在某个时候更改名称(typfmt),或者成为官方的,但我可能不会是主要开发者。

Typst 语言正在进行中的格式化工具!

目标

  • 在任何情况下都应提供良好的输出,任何不良好的输出都应报告为错误!
  • 快速、小巧、可配置和可嵌入的库和二进制文件!

状态

目前,输出不应总是可信的,并且不完美,但应该是无损的。

安装

cargo install --git https://github.com/astrale-sharp/typstfmt.git

这将把编译后的二进制文件放在 ~/.cargo/bin/。要使用它而无需在二进制文件前加路径,您必须将此目录添加到您的 PATH。您可以使用 echo "$PATH" 检查它是否已经添加。

如果您尚未将 ~/.cargo/bin 添加到您的 PATH,则应在您的 .bashrc.zshrc 等文件中添加以下行。

export PATH="$HOME/.cargo/bin:$PATH"

新实例的 shell(bash、zsh)将具有更新的 PATH。或者,您可以将此添加到您的 .profile.zshenv 以在系统启动时更新您的 PATH。这将需要重新启动计算机。

贡献

  • 请随时提出问题或进行讨论!由于我没有 GitHub 通知,所以您也可以自由地在 typst Discord 服务器(在 Astrale)上联系我。
  • 一旦讨论完毕,你可以开启一个Pull Request,但不要提前开启,因为我有点混乱,这个项目还在进行中,所以事情变化很快,我不希望你浪费时间。

架构

主要逻辑

由于我们要访问AST(它是一个树),我们有一个递归函数 visit(node: &LinkedNode, ctx: &mut Ctx) 来遍历树中的所有节点。

它首先格式化子节点(自下而上),然后父节点决定如何处理它们的子节点。

子节点可以访问任意上下文(它们可以知道它们父节点的类型,谁是它们的兄弟等)。

测试和可视化

安装 Insta

我们使用insta! 如果你还没有安装,请查看这里(我建议使用cargo binstall进行安装,因为我有一台小电脑,不喜欢等待编译)

cargo binstall的one-liner: curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash

然后 cargo binstall cargo-insta

在此处使用 Insta

我能看到它的实际效果吗?

查看它当前如何格式化所有代码片段

  • 运行 cargo test,失败的测试表明在下一步显示的某个代码片段的格式已经不再是这样了。
  • 运行 show_all.sh

这就是我能帮助我测试的所有内容吗?

当然不是!我们在测试期间启用了跟踪!

如果你正在贡献测试,你应该在src/tests下添加一个测试用例,例如:make_test!(call_func_empty, "#f()");

然后运行你的测试: cargo test && cargo insta review

如果信息日志不够,运行 DEBUG=true cargo test。如果你希望将输出重定向到文件,运行 NO_COLOR=true cargo test 你也可以设置NOLOG环境变量来完全禁用日志。

依赖

~5–15MB
~163K SLoC