Saltar al contenido

OpenRewrite

Liste, previsualice y aplique recetas de OpenRewrite a fuentes Java con elide rewrite, añada dependencias de recetas y use el índice de código para seleccionar archivos antes del análisis.

En esta página

elide rewrite ejecuta recetas de OpenRewrite sobre las fuentes Java principales de un proyecto de Elide. Úselo para automatizar cambios en el código fuente, previsualizar el diff y aplicar la misma receta desde la terminal o en CI.

Experimental en 1.6.0; el refuerzo de la compatibilidad de recetas está previsto para 1.6.1.

Previsualizar y aplicar una receta

Ejecute estos comandos desde un proyecto con un elide.pkl y fuentes Java:

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

--list imprime los nombres de las recetas disponibles y sus nombres para mostrar. --dry-run imprime el diff propuesto sin modificar los archivos fuente. Omítalo para aplicar los cambios y luego ejecute sus pruebas. La resolución de dependencias, la indexación y la compilación pueden escribir estado de compilación incluso en una simulación.

Para un proyecto mínimo, cree elide.pkl:

amends "elide:project.pkl"

name = "rewrite-demo"

Y 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 receta RemoveUnusedImports elimina el import List sin usar. La previsualización deja el archivo sin cambios; tras aplicarla, una segunda ejecución no tiene nada que cambiar.

Añadir módulos de recetas

Declare los JAR de recetas en dependencies.maven.devPackages. Sustituya la coordenada ilustrativa de abajo por la coordenada y la versión publicadas de su módulo de recetas:

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

Vuelva a ejecutar elide rewrite --list para descubrir las recetas del módulo. Elide descubre las clases de recetas y las recetas declarativas en YAML empaquetadas en META-INF/rewrite/ dentro de esos JAR. Seleccione una receta declarativa por su nombre declarado; no hay ninguna opción de la CLI para cargar un archivo YAML suelto desde el directorio del proyecto.

Las recetas se ejecutan en el orden en que se nombran en la línea de comandos:

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

Elide resuelve las bibliotecas de recetas por separado de las dependencias de la aplicación del proyecto. Elija módulos de recetas compatibles con OpenRewrite 8.90.4, la versión incluida; declarar un módulo que pida un núcleo más reciente no actualiza la versión del núcleo del ejecutor.

Cómo se usa el índice

El índice de código de dependencias de Elide proporciona información de tipos y miembros de las dependencias al analizador de Java y al catálogo con el que se descubren las recetas. Una reescritura construye automáticamente las capas del índice de dependencias que necesita.

Antes de reescribir, Elide compila las fuentes principales de Java y Kotlin e indexa sus referencias. Para las precondiciones explícitas de tipo y método admitidas, usa esas referencias y los tokens del código fuente para seleccionar los archivos Java candidatos antes de que OpenRewrite los analice. OpenRewrite sigue evaluando las precondiciones de la receta sobre los archivos seleccionados.

El filtrado admite búsquedas literales de tipos y métodos en precondiciones declarativas y metadatos opcionales de precondiciones aportados por los módulos de recetas. Con patrones no admitidos o datos de índice incompletos se conserva el conjunto de fuentes completo. Las recetas que necesitan recorrer todo el proyecto también analizan el conjunto de fuentes completo. Un conjunto de candidatos más pequeño reduce el trabajo de análisis, pero la compilación y la indexación tienen su propio costo.

Para omitir el paso de compilación y filtrado:

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

Así se analizan todas las fuentes Java principales y se sigue usando el índice de dependencias para la información de tipos. Es útil para comparar con una ejecución filtrada o para intentar reparar fuentes que no compilan. --list también omite la compilación de las fuentes principales.

Opciones

OpciónEfecto
--listLista las recetas disponibles y termina.
--dry-runImprime los diffs sin aplicar cambios en el código fuente.
--no-prefilterOmite la compilación de las fuentes principales y el filtrado de candidatos.
--offlineUsa las dependencias disponibles localmente; falla si faltan artefactos necesarios.

La primera ejecución puede descargar tanto las dependencias del proyecto como las bibliotecas de recetas. Prepárelas con una ejecución en línea antes de usar --offline. Una receta desconocida sale con 1; un uso incorrecto del comando sale con 2.

Alcance y límites

  • Los archivos de entrada provienen del conjunto de fuentes Java principal. Las fuentes Kotlin aportan referencias compiladas, pero no se reescriben; los conjuntos de fuentes de pruebas no son entradas de la reescritura.
  • No se admiten las recetas que leen valores de anotaciones en tipos de dependencias. La información de tipos de las dependencias tampoco incluye los valores por defecto de las anotaciones ni las anotaciones de parámetros y tipos.
  • Los JAR hermanos del espacio de trabajo y las dependencias indicadas como rutas del sistema de archivos no se incluyen en la información de tipos indexada que usa el analizador.
  • La compatibilidad de las recetas varía. Revise el diff de la simulación y ejecute las pruebas tras aplicar los cambios.

Proyectos de Maven, Gradle y Bazel

Estos comandos usan una definición de proyecto elide.pkl. Las integraciones con Maven, Gradle y Bazel seleccionan compiladores y otras herramientas dentro de esas compilaciones; no importan sus grafos de dependencias en elide rewrite ni añaden un objetivo, una tarea o una regla de reescritura.

Para usar este flujo de trabajo junto a una compilación existente, defina los conjuntos de fuentes, la versión de destino, los repositorios y las dependencias correspondientes en un elide.pkl, o use Adoptar un proyecto existente. Mantenga esa definición sincronizada con la compilación que use para probar el resultado.

Para inspeccionar el código sin modificar las fuentes, consulte Índice de código de dependencias.

¿Te resultó útil esta página?