elide rewrite запускає рецепти OpenRewrite для основних вихідних файлів Java у проєкті Elide. За його допомогою
можна автоматизувати зміни коду, заздалегідь переглянути diff і застосувати той самий рецепт із термінала або в CI.
Експериментальна функція в 1.6.0; покращення сумісності рецептів заплановано на 1.6.1.
Перегляд і застосування рецепта
Виконайте ці команди в проєкті з elide.pkl і вихідними файлами Java:
elide rewrite --list
elide rewrite org.openrewrite.java.RemoveUnusedImports --dry-run
elide rewrite org.openrewrite.java.RemoveUnusedImports
elide test--list виводить імена доступних рецептів і їхні відображувані назви. --dry-run виводить запропонований diff, не
змінюючи вихідні файли. Приберіть його, щоб застосувати зміни, а потім запустіть тести. Розв’язання залежностей,
індексування та компіляція можуть записувати стан збирання й під час пробного запуску.
Для мінімального проєкту створіть elide.pkl:
amends "elide:project.pkl"
name = "rewrite-demo"І 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");
}
}Рецепт RemoveUnusedImports видаляє невикористаний імпорт List. Попередній перегляд залишає файл без змін; після
застосування повторний запуск нічого не змінює.
Додавання модулів рецептів
Оголосіть JAR-файли рецептів у dependencies.maven.devPackages. Замініть умовну координату нижче на опубліковану
координату й версію вашого модуля рецептів:
dependencies {
maven {
devPackages {
"com.example:rewrite-recipes:1.0.0"
}
}
}Знову виконайте elide rewrite --list, щоб побачити рецепти модуля. Elide знаходить класи рецептів і декларативні
рецепти YAML, запаковані в цих JAR-файлах у META-INF/rewrite/. Декларативний рецепт вибирається за оголошеним
ім’ям; параметра CLI для завантаження окремого YAML-файлу з каталогу проєкту немає.
Рецепти виконуються в тому порядку, у якому їх указано в командному рядку:
elide rewrite org.openrewrite.java.RemoveUnusedImports org.openrewrite.java.format.AutoFormat --dry-runElide розв’язує бібліотеки рецептів окремо від залежностей застосунку. Вибирайте модулі рецептів, сумісні з вбудованою версією OpenRewrite 8.90.4; модуль, що вимагає новішого ядра, не оновлює версію ядра виконавця.
Як використовується індекс
Індекс коду залежностей Elide передає відомості про типи й члени залежностей парсеру Java і каталогу, за яким знаходяться рецепти. Переписування автоматично будує потрібні шари індексу залежностей.
Перед переписуванням Elide компілює основні вихідні файли Java і Kotlin та індексує їхні посилання. Для підтримуваних явних передумов щодо типів і методів він за цими посиланнями й токенами вихідного коду відбирає файли Java-кандидати до того, як OpenRewrite їх розбере. OpenRewrite і далі перевіряє передумови рецепта на відібраних файлах.
Фільтрування підтримує пошук типів і методів за точною назвою в декларативних передумовах, а також необов’язкові метадані передумов із модулів рецептів. За непідтримуваних шаблонів або неповних даних індексу зберігається весь набір вихідних файлів. Рецепти, яким потрібен перегляд усього проєкту, теж розбирають весь набір вихідних файлів. Менший набір кандидатів скорочує розбір, але компіляція та індексування мають власну ціну.
Щоб пропустити компіляцію та фільтрування:
elide rewrite org.openrewrite.java.RemoveUnusedImports --dry-run --no-prefilterУ цьому разі розбираються всі основні вихідні файли Java, а відомості про типи й далі беруться з індексу залежностей.
Це корисно для порівняння з відфільтрованим запуском або для спроби виправити вихідні файли, які не компілюються.
--list теж пропускає компіляцію основних вихідних файлів.
Параметри
| Параметр | Дія |
|---|---|
--list | Вивести доступні рецепти й завершитися. |
--dry-run | Вивести diff, не застосовуючи змін до вихідних файлів. |
--no-prefilter | Пропустити компіляцію основних вихідних файлів і відбір кандидатів. |
--offline | Використовувати локально доступні залежності; завершитися з помилкою, якщо потрібних артефактів немає. |
Перший запуск може завантажити і залежності проєкту, і бібліотеки рецептів. Підготуйте їх запуском із доступом до
мережі, перш ніж використовувати --offline. Невідомий рецепт завершує команду з кодом 1, неправильне використання
команди — з кодом 2.
Область дії та обмеження
- Вхідні файли беруться з основного набору вихідних файлів Java. Вихідні файли Kotlin дають скомпільовані посилання, але не переписуються; тестові набори вихідних файлів не є вхідними даними для переписування.
- Рецепти, що читають значення анотацій у типах залежностей, не підтримуються. У відомостях про типи залежностей також немає значень анотацій за замовчуванням та анотацій параметрів і типів.
- Сусідні JAR-файли робочого простору й залежності, указані як шляхи у файловій системі, не потрапляють до індексованих відомостей про типи, які використовує парсер.
- Сумісність рецептів буває різною. Перевіряйте diff пробного запуску й запускайте тести після застосування змін.
Проєкти Maven, Gradle і Bazel
Ці команди працюють з описом проєкту в elide.pkl. Інтеграції з Maven, Gradle і Bazel вибирають
компілятори та інші інструменти всередині цих збирань; вони не імпортують свої графи залежностей до elide rewrite
і не додають ціль, завдання чи правило для переписування.
Щоб використовувати цей робочий процес поруч із наявним збиранням, опишіть потрібні набори вихідних файлів, цільову
версію, репозиторії та залежності в elide.pkl або скористайтеся розділом
Перенесення наявного проєкту. Підтримуйте цей опис узгодженим зі збиранням, яким ви
перевіряєте результат.
Щоб вивчати код без зміни вихідних файлів, див. Індекс коду залежностей.