主要观点:作者加入Topiary团队后,尝试用其格式化 Bash,起初因 Tree-sitter Bash 语法存在问题未成功,两年后该语法及 Topiary 都有发展,Nicolas Bacquey 解决问题使 Bash 成为“支持语言”,并对比了 Topiary 和shfmt
这两个 Bash 格式化工具。
关键信息:
- 起初 Tree-sitter Bash 语法有问题,两年后 Nicolas Bacquey 解决,Bash 成为支持语言,Topiary v0.6 中 Bash 格式化状态良好。
shfmt
是 Bash 的事实上的格式化工具,写于 Go 语言,活跃维护多年。- Topiary 目前在区分行续行与其他标记边界、“对齐块”(特别是注释)、字符串插值格式化等方面不如
shfmt
,但在处理某些shfmt
不喜欢的构造以及实现“重写规则”方面有优势。 - 比较两者吞吐量,Topiary 比
shfmt
快约 3 倍,且 idempotency 检查的惩罚可忽略,输入大小对吞吐量有影响。 - 作者在写博客期间对 Topiary 的 Bash 支持进行了调整,使其表现更好,Topiary 虽有不足但已成为 Bash 生态系统的竞争者。
重要细节: - 列举了 Bash 语法中的一些怪异之处,如尾随注释、case 语句、数组索引计算、命令替换与算术扩展区分等。
- 详细说明了 Topiary 与
shfmt
在处理各种 Bash 构造上的差异,包括数组索引赋值、 brace 展开等。 - 介绍了比较吞吐量的实验方法,包括选取脚本、随机化、拼接输入等步骤,并给出了实验结果。
- 提及在写博客期间对 Topiary 的 Bash 格式化规则进行的调整内容。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。