簡介
本文探討了使用基於 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イテイイグググ 的英文翻譯。
以上是Wombat - 使用從 Crystal 調用的 Rust 的 Bat 進行語法高亮顯示的詳細內容。更多資訊請關注PHP中文網其他相關文章!