elide rewrite führt OpenRewrite-Rezepte auf den Java-Hauptquellen eines Elide-Projekts aus. Damit automatisieren
Sie Quelltextänderungen, sehen den Diff vorab und wenden dasselbe Rezept im Terminal oder in der CI an.
Experimentell in 1.6.0; eine Härtung der Rezeptkompatibilität ist für 1.6.1 geplant.
Rezept ansehen und anwenden
Führen Sie diese Befehle in einem Projekt mit elide.pkl und Java-Quellen aus:
elide rewrite --list
elide rewrite org.openrewrite.java.RemoveUnusedImports --dry-run
elide rewrite org.openrewrite.java.RemoveUnusedImports
elide test--list gibt die Namen und Anzeigenamen der verfügbaren Rezepte aus. --dry-run gibt den vorgeschlagenen Diff aus,
ohne Quelldateien zu ändern. Lassen Sie die Option weg, um die Änderungen anzuwenden, und führen Sie dann Ihre Tests
aus. Abhängigkeitsauflösung, Indizierung und Kompilierung können auch bei einem Probelauf Build-Zustand schreiben.
Legen Sie für ein minimales Projekt elide.pkl an:
amends "elide:project.pkl"
name = "rewrite-demo"Und src/main/java/demo/Main.java:
package demo;
import java.util.List;
public class Main {
public static void main(String[] args) {
System.out.println("Hello");
}
}Das Rezept RemoveUnusedImports entfernt den ungenutzten Import List. Die Vorschau lässt die Datei unverändert;
nach dem Anwenden hat ein zweiter Lauf nichts mehr zu ändern.
Rezeptmodule hinzufügen
Deklarieren Sie Rezept-JARs in dependencies.maven.devPackages. Ersetzen Sie die Beispielkoordinate unten durch die
veröffentlichte Koordinate und Version Ihres Rezeptmoduls:
dependencies {
maven {
devPackages {
"com.example:rewrite-recipes:1.0.0"
}
}
}Führen Sie elide rewrite --list erneut aus, um die Rezepte des Moduls zu finden. Elide erkennt Rezeptklassen und
deklarative YAML-Rezepte, die in diesen JARs unter META-INF/rewrite/ liegen. Wählen Sie ein deklaratives Rezept über
seinen deklarierten Namen aus; eine CLI-Option zum Laden einer einzelnen YAML-Datei aus dem Projektverzeichnis gibt es
nicht.
Rezepte laufen in der Reihenfolge, in der sie auf der Befehlszeile stehen:
elide rewrite org.openrewrite.java.RemoveUnusedImports org.openrewrite.java.format.AutoFormat --dry-runElide löst die Rezeptbibliotheken getrennt von den Anwendungsabhängigkeiten des Projekts auf. Wählen Sie Rezeptmodule, die mit dem mitgelieferten OpenRewrite 8.90.4 kompatibel sind; ein Modul, das einen neueren Kern anfordert, hebt die Kernversion des Runners nicht an.
Wie der Index genutzt wird
Der Codeindex für Abhängigkeiten von Elide liefert Typ- und Memberinformationen der Abhängigkeiten an den Java-Parser und an den Katalog, über den Rezepte gefunden werden. Ein Rewrite baut die benötigten Schichten des Abhängigkeitsindex automatisch.
Vor dem Umschreiben kompiliert Elide die Java- und Kotlin-Hauptquellen und indiziert ihre Referenzen. Für unterstützte explizite Typ- und Methoden-Vorbedingungen wählt es mit diesen Referenzen und Quelltext-Tokens die Kandidaten unter den Java-Dateien aus, bevor OpenRewrite sie parst. OpenRewrite prüft die Vorbedingungen des Rezepts weiterhin auf den ausgewählten Dateien.
Die Filterung unterstützt literale Typ- und Methodensuchen in deklarativen Vorbedingungen sowie optionale Vorbedingungs-Metadaten aus Rezeptmodulen. Bei nicht unterstützten Mustern oder unvollständigen Indexdaten bleibt das vollständige Source-Set erhalten. Rezepte, die das ganze Projekt durchsuchen müssen, parsen ebenfalls das vollständige Source-Set. Weniger Kandidaten verringern den Parse-Aufwand, aber Kompilierung und Indizierung haben eigene Kosten.
So überspringen Sie Kompilierung und Filterung:
elide rewrite org.openrewrite.java.RemoveUnusedImports --dry-run --no-prefilterDabei wird jede Java-Hauptquelle geparst, und der Abhängigkeitsindex liefert weiterhin die Typinformationen. Das hilft
beim Vergleich mit einem gefilterten Lauf oder bei einem Reparaturversuch an Quellen, die nicht kompilieren. Auch
--list überspringt die Kompilierung der Hauptquellen.
Optionen
| Option | Wirkung |
|---|---|
--list | Verfügbare Rezepte auflisten und beenden. |
--dry-run | Diffs ausgeben, ohne Quelltextänderungen anzuwenden. |
--no-prefilter | Kompilierung der Hauptquellen und Kandidatenfilterung überspringen. |
--offline | Lokal verfügbare Abhängigkeiten verwenden; Fehler, wenn benötigte Artefakte fehlen. |
Der erste Lauf kann sowohl Projektabhängigkeiten als auch Rezeptbibliotheken herunterladen. Bereiten Sie sie mit einem
Online-Lauf vor, bevor Sie --offline verwenden. Bei einem unbekannten Rezept endet der Befehl mit Exit-Code 1, bei
einem ungültigen Aufruf mit 2.
Umfang und Grenzen
- Eingabedateien stammen aus dem Java-Haupt-Source-Set. Kotlin-Quellen liefern kompilierte Referenzen, werden aber nicht umgeschrieben; Test-Source-Sets sind keine Eingaben für Rewrites.
- Rezepte, die Annotationswerte an Abhängigkeitstypen lesen, werden nicht unterstützt. Den Typinformationen der Abhängigkeiten fehlen außerdem Annotations-Standardwerte sowie Parameter- und Typannotationen.
- Benachbarte JARs im Workspace und als Dateisystempfade angegebene Abhängigkeiten sind nicht Teil der indizierten Typinformationen, die der Parser verwendet.
- Die Rezeptkompatibilität variiert. Prüfen Sie den Diff des Probelaufs und führen Sie nach dem Anwenden die Tests aus.
Maven-, Gradle- und Bazel-Projekte
Diese Befehle verwenden eine elide.pkl-Projektdefinition. Die
Integrationen für Maven, Gradle und Bazel wählen Compiler und andere Werkzeuge innerhalb dieser Builds
aus; sie importieren deren Abhängigkeitsgraphen nicht in elide rewrite und fügen kein Rewrite-Goal, keinen
Rewrite-Task und keine Rewrite-Regel hinzu.
Um diesen Workflow neben einem bestehenden Build zu nutzen, definieren Sie die passenden Source-Sets, die Zielversion,
die Repositorys und die Abhängigkeiten in einer elide.pkl oder verwenden Sie
Bestehendes Projekt übernehmen. Halten Sie diese Definition synchron mit dem Build, mit dem Sie
das Ergebnis testen.
Zur Codeanalyse ohne Änderung der Quellen siehe Codeindex für Abhängigkeiten.