首頁 > 後端開發 > C++ > Wombat - 使用從 Crystal 調用的 Rust 的 Bat 進行語法高亮顯示

Wombat - 使用從 Crystal 調用的 Rust 的 Bat 進行語法高亮顯示

Barbara Streisand
發布: 2025-01-16 14:04:58
原創
297 人瀏覽過

Wombat - Syntax Highlighting with Rust

簡介

本文探討了使用基於 Rust 的命令列工具 bat 作為 Crystal 中的函式庫,Crystal 是一種目前缺乏強大的語法突出顯示庫的語言。 batcat 類似,顯示文件內容,但提供行號、語法突出顯示和分頁等增強功能。

<code>bat hello.rb</code>
登入後複製
登入後複製

利用 bat 作為函式庫可以解決此 Crystal 限制。

bat 作為 Rust 庫

batPrettyPrinter 結構使其可以用作 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的關鍵考慮因素包括:

  • 記憶體管理:仔細處理字串記憶體分配和釋放以防止洩漏。 Rust 分配的記憶體需要對應的 Rust 端釋放函數。
  • Cargo.toml 配置: 配置 Cargo.toml 產生動態 (cdylib) 和靜態 (staticlib) 庫,從而實現使用的靈活性。 rpath = true 允許相對路徑庫位置。 使用 LTO 和 codegen-units = 1 發布設定檔最佳化。
  • 版本控制:新增了版本函數(bat_c_version),將版本儲存在靜態記憶體中以便於存取。
  • Renovate 整合: Renovate 已實現自動庫版本更新。
  • GitHub 操作: 建立 Git 標籤時自動發布觸發器。 cargo publish 被避免,因為 bat-c 是一個純 C 函式庫。

從水晶呼叫bat-cwombat

水晶庫 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 工作流程

Wombat - Syntax Highlighting with Rust

需要改進的地方

  • 庫大小:產生的函式庫比較大。
  • API 設計: API 可以受益於更精緻的設計,最好考慮到最初 Rust 開發的 C 相容性。
  • Rust/C 專業知識:改進 Rust 和 C 知識將帶來更有效率、更完善的函式庫。

儘管存在這些需要改進的地方,該專案還是成功實現了其主要目標:在 Crystal 中實現 bat 的輕鬆且可維護的使用。 作者歡迎貢獻並發表報告。

(Qiita 上的原始日文貼文:Wombat - RustのBatをCrystalから呼び出しシンタkksuハairaイテイイグググ 的英文翻譯。

以上是Wombat - 使用從 Crystal 調用的 Rust 的 Bat 進行語法高亮顯示的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板