はじめに
この記事では、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
が作成されました。これにより、C との相互運用性を備えた Crystal および他の言語から bat
にアクセスできるようになります。 bat-c
の開発では、作者の Rust と 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
は純粋な C ライブラリであるため、bat-c
は避けられました。Crystal から bat-c
を呼び出します: wombat
Crystal ライブラリ wombat
は、bat-c
との対話を簡素化するために開発されました。 主な課題は、bat-c
ライブラリのダウンロードと配置を管理することでした。 bat-c
はまだ広く配布されていないため、GitHub Releases から直接ダウンロードすることが選択されました。 Crystal とのシームレスな統合のために、静的ライブラリが好まれました。 ダウンロード プロセスは、shards
(Unix 風の) またはバッチ スクリプト (Windows) を使用する curl
post_install フックを介して処理されます。
使用例
wombat
ライブラリは次の関数を提供します。
pretty_print_file
: ファイルを強調表示する構文。pretty_print
: 文字列を強調表示する構文。pretty_string
: 強調表示された文字列を返します。<code>bat hello.rb</code>
GitHub アクションのワークフロー
改善すべき領域
これらの改善の余地があるにもかかわらず、プロジェクトは、Crystal 内で bat
を簡単かつ保守的に使用できるようにするという主な目標を達成しました。 著者は寄稿や問題の報告を歓迎します。
(元の日本語投稿は Qiita: Wombat - RustのBatをCrystalから呼び出しシンタックスハイライトする。ChatGPTによる英語翻訳。)
以上がWombat - Crystal から呼び出された Rust の Bat を使用した構文ハイライトの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。