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-runElide 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-prefilterAsí 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ón | Efecto |
|---|---|
--list | Lista las recetas disponibles y termina. |
--dry-run | Imprime los diffs sin aplicar cambios en el código fuente. |
--no-prefilter | Omite la compilación de las fuentes principales y el filtrado de candidatos. |
--offline | Usa 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.