简介
本文探讨了使用基于 Rust 的命令行工具 bat
作为 Crystal 中的库,Crystal 是一种目前缺乏强大的语法突出显示库的语言。 bat
与 cat
类似,显示文件内容,但提供行号、语法突出显示和分页等增强功能。
<code>bat hello.rb</code>
利用 bat
作为库可以解决此 Crystal 限制。
bat
作为 Rust 库
bat
的 PrettyPrinter
结构使其可以用作 Rust 库。 然而,bat
对复杂 Syntect 库的语法突出显示的依赖最初提出了一个挑战。 为了简化这一点,在 print_with_writer
中添加了 PrettyPrinter
函数,允许直接字符串语法突出显示。此添加是通过拉取请求贡献的,可从 bat
版本 0.25.0 开始使用。
<code class="language-rust">use bat::PrettyPrinter; // ... code utilizing print_with_writer ...</code>
创建 C 包装器:bat-c
由于 Rust 库无法直接从 Crystal 调用,因此创建了一个轻量级 C 包装库 bat-c
。这允许从 Crystal 和其他具有 C 互操作性的语言访问 bat
。 由于作者的 Rust 和 C 专业知识有限,bat-c
的开发大量使用了 ChatGPT 和 Copilot。 bat-c
存储库位于:https://www.php.cn/link/065982e894fcde21153454b2ea4b2a8a
构建bat-c
的关键考虑因素包括:
Cargo.toml
生成动态 (cdylib
) 和静态 (staticlib
) 库,从而实现使用的灵活性。 rpath = true
允许相对路径库位置。 使用 LTO 和 codegen-units = 1
发布配置文件优化。bat_c_version
),将版本存储在静态内存中以便于访问。cargo publish
被避免,因为 bat-c
是一个纯 C 库。从水晶呼叫bat-c
:wombat
水晶库 wombat
是为了简化与 bat-c
的交互而开发的。 主要挑战是管理 bat-c
库的下载和放置。 由于 bat-c
尚未广泛分发,因此选择直接从 GitHub Releases 下载。 静态库因其与 Crystal 的无缝集成而受到青睐。 下载过程通过 shards
post_install 挂钩处理,使用 curl
(类 Unix)或批处理脚本 (Windows)。
使用示例
wombat
库提供以下功能:
pretty_print_file
:突出显示文件的语法。pretty_print
:语法突出显示字符串。pretty_string
:返回突出显示的字符串。<code>bat hello.rb</code>
GitHub Actions 工作流程
需要改进的地方
尽管存在这些需要改进的地方,该项目还是成功实现了其主要目标:在 Crystal 中实现 bat
的轻松且可维护的使用。 作者欢迎贡献并发表报告。
(Qiita 上的原始日文帖子:Wombat - RustのBatをCrystalから呼び出しシンタkksuハairaイティングする。ChatGPT 的英文翻译。)
以上是Wombat - 使用从 Crystal 调用的 Rust 的 Bat 进行语法高亮显示的详细内容。更多信息请关注PHP中文网其他相关文章!