Maison >développement back-end >C++ >Wombat - Mise en évidence de la syntaxe avec Rust's Bat Called from Crystal
Présentation
Cet article explore l'utilisation de l'outil de ligne de commande basé sur Rust bat
en tant que bibliothèque dans Crystal, un langage qui manque actuellement d'une bibliothèque robuste de coloration syntaxique. bat
, similaire à cat
, affiche le contenu du fichier mais offre des fonctionnalités améliorées telles que la numérotation des lignes, la coloration syntaxique et la pagination.
<code>bat hello.rb</code>
Exploiter bat
en tant que bibliothèque résout cette limitation de Crystal.
bat
en tant que bibliothèque Rust
de bat
PrettyPrinter
permet son utilisation comme bibliothèque Rust. Cependant, la dépendance de bat
à l'égard de la bibliothèque complexe Syntect pour la coloration syntaxique a initialement présenté un défi. Pour simplifier cela, une fonction print_with_writer
a été ajoutée à PrettyPrinter
, permettant la mise en évidence directe de la syntaxe des chaînes. Cet ajout a été contribué via une pull request et est disponible à partir de la bat
version 0.25.0.
<code class="language-rust">use bat::PrettyPrinter; // ... code utilizing print_with_writer ...</code>
Création d'un wrapper C : bat-c
Étant donné que les bibliothèques Rust ne peuvent pas être appelées directement depuis Crystal, une bibliothèque wrapper C légère, bat-c
, a été créée. Cela permet d'accéder à bat
depuis Crystal et d'autres langages avec interopérabilité C. Le développement de bat-c
a largement utilisé ChatGPT et Copilot en raison de l'expertise limitée de l'auteur en Rust et C. Le référentiel bat-c
est disponible sur : https://www.php.cn/link/065982e894fcde21153454b2ea4b2a8a
Considérations clés lors de la construction bat-c
incluses :
Cargo.toml
pour générer des bibliothèques dynamiques (cdylib
) et statiques (staticlib
), permettant une flexibilité d'utilisation. rpath = true
permet l'emplacement de la bibliothèque de chemins relatifs. Optimisation du profil de publication à l'aide de LTO et codegen-units = 1
.bat_c_version
) a été ajoutée, stockant la version dans la mémoire statique pour un accès facile.cargo publish
a été évité car bat-c
est une bibliothèque purement C.Appel bat-c
de Crystal : wombat
Une bibliothèque Crystal, wombat
, a été développée pour simplifier l'interaction avec bat-c
. Le principal défi consistait à gérer le téléchargement et le placement de la bibliothèque bat-c
. Étant donné que bat-c
n'est pas encore largement distribué, un téléchargement direct depuis GitHub Releases a été choisi. Une bibliothèque statique a été préférée pour son intégration transparente avec Crystal. Le processus de téléchargement est géré via un hook shards
post_install, utilisant curl
(de type Unix) ou un script batch (Windows).
Exemples d'utilisation
La bibliothèque wombat
fournit des fonctions pour :
pretty_print_file
: Syntaxe mettant en évidence un fichier.pretty_print
: Syntaxe mettant en évidence une chaîne.pretty_string
: Renvoie une chaîne en surbrillance.<code>bat hello.rb</code>
Flux de travail des actions GitHub
Domaines à améliorer
Malgré ces points à améliorer, le projet atteint avec succès son objectif principal : permettre une utilisation facile et maintenable de bat
au sein de Crystal. L'auteur accueille les contributions et publie des rapports.
(Article japonais original sur Qiita : Wombat - RustのBatをCrystalから呼び出しシンタックスハイライティングする. Traduction anglaise par ChatGPT.)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!