Aller au contenu

OpenRewrite

Listez, prévisualisez et appliquez des recettes OpenRewrite aux sources Java avec elide rewrite, ajoutez des dépendances de recettes et utilisez l'index du code pour sélectionner les fichiers avant l'analyse.

Sur cette page

elide rewrite exécute des recettes OpenRewrite sur les sources Java principales d’un projet Elide. Utilisez-le pour automatiser des modifications du code source, prévisualiser le diff et appliquer la même recette depuis le terminal ou en CI.

Expérimental en 1.6.0 ; le renforcement de la compatibilité des recettes est prévu pour 1.6.1.

Prévisualiser et appliquer une recette

Exécutez ces commandes depuis un projet doté d’un elide.pkl et de sources Java :

elide rewrite --list
elide rewrite org.openrewrite.java.RemoveUnusedImports --dry-run
elide rewrite org.openrewrite.java.RemoveUnusedImports
elide test

--list affiche les noms des recettes disponibles et leurs noms d’affichage. --dry-run affiche le diff proposé sans modifier les fichiers source. Omettez-le pour appliquer les modifications, puis lancez vos tests. La résolution des dépendances, l’indexation et la compilation peuvent quand même écrire un état de build pendant une exécution à blanc.

Pour un projet minimal, créez elide.pkl :

amends "elide:project.pkl"

name = "rewrite-demo"

Et 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");
  }
}

La recette RemoveUnusedImports supprime l’import List inutilisé. La prévisualisation laisse le fichier inchangé ; après application, une seconde exécution n’a plus rien à modifier.

Ajouter des modules de recettes

Déclarez les JAR de recettes dans dependencies.maven.devPackages. Remplacez la coordonnée d’exemple ci-dessous par la coordonnée et la version publiées de votre module de recettes :

dependencies {
  maven {
    devPackages {
      "com.example:rewrite-recipes:1.0.0"
    }
  }
}

Relancez elide rewrite --list pour découvrir les recettes du module. Elide découvre les classes de recettes et les recettes déclaratives YAML empaquetées sous META-INF/rewrite/ dans ces JAR. Sélectionnez une recette déclarative par son nom déclaré ; aucune option de la CLI ne charge un fichier YAML isolé depuis le répertoire du projet.

Les recettes s’exécutent dans l’ordre où elles sont nommées sur la ligne de commande :

elide rewrite org.openrewrite.java.RemoveUnusedImports org.openrewrite.java.format.AutoFormat --dry-run

Elide résout les bibliothèques de recettes séparément des dépendances applicatives du projet. Choisissez des modules de recettes compatibles avec OpenRewrite 8.90.4, la version intégrée ; déclarer un module qui demande un cœur plus récent ne met pas à jour la version du cœur de l’exécuteur.

Utilisation de l’index

L’index du code des dépendances d’Elide fournit les informations de types et de membres des dépendances à l’analyseur Java et au catalogue qui sert à découvrir les recettes. Une réécriture construit automatiquement les couches de l’index des dépendances dont elle a besoin.

Avant de réécrire, Elide compile les sources principales Java et Kotlin et indexe leurs références. Pour les préconditions explicites de type et de méthode prises en charge, il utilise ces références et les tokens du code source pour sélectionner les fichiers Java candidats avant qu’OpenRewrite ne les analyse. OpenRewrite évalue toujours les préconditions de la recette sur les fichiers sélectionnés.

Le filtrage prend en charge les recherches littérales de types et de méthodes dans les préconditions déclaratives, ainsi que les métadonnées de préconditions facultatives fournies par les modules de recettes. Avec des motifs non pris en charge ou des données d’index incomplètes, le source set complet est conservé. Les recettes qui doivent parcourir tout le projet analysent aussi le source set complet. Un ensemble de candidats plus petit réduit le travail d’analyse, mais la compilation et l’indexation ont leur propre coût.

Pour sauter l’étape de compilation et de filtrage :

elide rewrite org.openrewrite.java.RemoveUnusedImports --dry-run --no-prefilter

Toutes les sources Java principales sont alors analysées, et l’index des dépendances fournit toujours les informations de types. C’est utile pour comparer avec une exécution filtrée ou pour tenter de réparer des sources qui ne compilent pas. --list saute aussi la compilation des sources principales.

Options

OptionEffet
--listListe les recettes disponibles et quitte.
--dry-runAffiche les diffs sans appliquer de modifications au code source.
--no-prefilterSaute la compilation des sources principales et le filtrage des candidats.
--offlineUtilise les dépendances disponibles localement ; échoue s’il manque des artefacts requis.

La première exécution peut télécharger à la fois les dépendances du projet et les bibliothèques de recettes. Préparez-les avec une exécution en ligne avant d’utiliser --offline. Une recette inconnue quitte avec 1 ; une utilisation incorrecte de la commande quitte avec 2.

Portée et limites

  • Les fichiers d’entrée proviennent du source set Java principal. Les sources Kotlin fournissent des références compilées, mais ne sont pas réécrites ; les source sets de test ne sont pas des entrées de la réécriture.
  • Les recettes qui lisent des valeurs d’annotations sur des types de dépendances ne sont pas prises en charge. Les informations de types des dépendances omettent aussi les valeurs par défaut des annotations et les annotations de paramètres et de types.
  • Les JAR voisins de l’espace de travail et les dépendances fournies sous forme de chemins du système de fichiers ne figurent pas dans les informations de types indexées qu’utilise l’analyseur.
  • La compatibilité des recettes varie. Examinez le diff de l’exécution à blanc et lancez les tests après avoir appliqué les modifications.

Projets Maven, Gradle et Bazel

Ces commandes utilisent une définition de projet elide.pkl. Les intégrations Maven, Gradle et Bazel sélectionnent les compilateurs et d’autres outils au sein de ces builds ; elles n’importent pas leurs graphes de dépendances dans elide rewrite et n’ajoutent ni goal, ni tâche, ni règle de réécriture.

Pour utiliser ce workflow à côté d’un build existant, définissez les source sets, la version cible, les dépôts et les dépendances correspondants dans un elide.pkl, ou suivez Adopter un projet existant. Gardez cette définition synchronisée avec le build qui vous sert à tester le résultat.

Pour inspecter le code sans modifier les sources, voir Index du code des dépendances.

Cette page vous a-t-elle aidé ?