Heim >Backend-Entwicklung >C++ >Wombat – Syntaxhervorhebung mit Rust's Bat aus Crystal
Einführung
In diesem Artikel geht es um die Verwendung des auf Rust basierenden Befehlszeilentools bat
als Bibliothek in Crystal, einer Sprache, der es derzeit an einer robusten Syntaxhervorhebungsbibliothek mangelt. bat
zeigt ähnlich wie cat
Dateiinhalte an, bietet jedoch erweiterte Funktionen wie Zeilennummerierung, Syntaxhervorhebung und Paginierung.
<code>bat hello.rb</code>
Durch die Nutzung bat
als Bibliothek wird diese Crystal-Einschränkung behoben.
bat
als Rust-Bibliothek
-Struktur von bat
PrettyPrinter
ermöglicht die Verwendung als Rust-Bibliothek. Allerdings stellte die Abhängigkeit von bat
auf die komplexe Syntect-Bibliothek zur Syntaxhervorhebung zunächst eine Herausforderung dar. Um dies zu vereinfachen, wurde print_with_writer
eine PrettyPrinter
-Funktion hinzugefügt, die eine direkte Hervorhebung der Zeichenfolgensyntax ermöglicht. Dieser Zusatz wurde über eine Pull-Anfrage beigesteuert und ist ab bat
Version 0.25.0 verfügbar.
<code class="language-rust">use bat::PrettyPrinter; // ... code utilizing print_with_writer ...</code>
Erstellen eines C-Wrappers: bat-c
Da Rust-Bibliotheken nicht direkt von Crystal aus aufgerufen werden können, wurde eine schlanke C-Wrapper-Bibliothek bat-c
erstellt. Dies ermöglicht den Zugriff auf bat
von Crystal und anderen Sprachen mit C-Interoperabilität. Bei der Entwicklung von bat-c
wurden ChatGPT und Copilot aufgrund der begrenzten Rust- und C-Kenntnisse des Autors stark genutzt. Das bat-c
Repository ist verfügbar unter: https://www.php.cn/link/065982e894fcde21153454b2ea4b2a8a
Zu den wichtigsten Überlegungen beim Bau bat-c
gehörten:
Cargo.toml
, um sowohl dynamische (cdylib
) als auch statische (staticlib
) Bibliotheken zu generieren, was eine flexible Nutzung ermöglicht. rpath = true
ermöglicht den relativen Pfad der Bibliotheksposition. Optimierung des Release-Profils mit LTO und codegen-units = 1
.bat_c_version
) wurde hinzugefügt, die die Version für einen einfachen Zugriff im statischen Speicher speichert.cargo publish
wurde vermieden, da bat-c
eine reine C-Bibliothek ist.Anruf bat-c
von Crystal: wombat
Eine Crystal-Bibliothek, wombat
, wurde entwickelt, um die Interaktion mit bat-c
zu vereinfachen. Die größte Herausforderung bestand darin, den Download und die Platzierung der bat-c
Bibliothek zu verwalten. Da bat-c
noch nicht weit verbreitet ist, wurde ein direkter Download von GitHub Releases gewählt. Aufgrund der nahtlosen Integration mit Crystal wurde eine statische Bibliothek bevorzugt. Der Download-Vorgang wird über einen shards
post_install-Hook abgewickelt, der curl
(Unix-ähnlich) oder ein Batch-Skript (Windows) verwendet.
Anwendungsbeispiele
Die wombat
-Bibliothek bietet Funktionen für:
pretty_print_file
: Syntax zum Hervorheben einer Datei.pretty_print
: Syntax, die eine Zeichenfolge hervorhebt.pretty_string
: Gibt eine hervorgehobene Zeichenfolge zurück.<code>bat hello.rb</code>
GitHub Actions Workflow
Bereiche mit Verbesserungspotenzial
Trotz dieser Bereiche mit Verbesserungsbedarf erreicht das Projekt erfolgreich sein Hauptziel: die einfache und wartbare Nutzung von bat
innerhalb von Crystal zu ermöglichen. Der Autor freut sich über Beiträge und Problemberichte.
(Original japanischer Beitrag auf Qiita: Wombat - RustのBatをCrystalから呼び出しシンタックスハイライティングする. Englische Übersetzung von ChatGPT.)
Das obige ist der detaillierte Inhalt vonWombat – Syntaxhervorhebung mit Rust's Bat aus Crystal. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!