Авторефакторинг PHP с Rector

Мы перевели проект на PHP 8.3, но код наших классов под новые возможности языка ещё не меняли. Чтобы не делать это вручную, сегодня мы проведём автообновление синтаксиса и авторефакторинг нашего PHP-проекта с помощью полезного инструмента Rector.

Также с его помощью упростим использование типов в Doctrine-сущностях и переведём PHPUnit-тесты с аннотаций на атрибуты. И потом спрограммируем собственный настраиваемый ректор для более аккуратного перевода наших классов на синтаксис Constructor Property Promotion:

  • 00:00:07 Сложность обновления синтаксиса
  • 00:01:30 Инструмент Rector для PHP
  • 00:05:46 Установка Rector и файл конфигурации
  • 00:07:09 Команды запуска в Makefile
  • 00:09:29 Исправления для PHP 8.3
  • 00:14:21 Новый атрибут Override
  • 00:20:36 Служебный интерфейс Stringable
  • 00:23:13 Передача First Class Callable
  • 00:24:17 Преобразование в стрелочные функции
  • 00:25:01 Типы для констант
  • 00:25:31 Модификатор readonly для полей
  • 00:28:17 Ручное добавление для Doctrine-классов
  • 00:31:01 Пометка внутренних методов через internal
  • 00:33:11 Проблемный Constructor Promotion Rector
  • 00:37:12 Автоформатирование Doctrine ORM и DBAL
  • 00:40:13 Пользовательские Doctrine-типы через константы
  • 00:41:17 Авторефакторинг для PHPUnit-тестов
  • 00:48:54 Упрощение вызова with для Mock
  • 00:50:22 Исправление проблемы Constructor Promotion
  • 00:55:18 Написание своего Rector-класса
  • 00:58:09 Генерация скелетона для кастомного правила
  • 01:00:56 Упрощение структуры директорий
  • 01:03:01 Добавление тестовых примеров
  • 01:06:35 Параметры конфигурации для правила
  • 01:10:25 Программирование своего ректора
  • 01:11:35 Инъекция оригинального ректора
  • 01:13:06 Проверка на наличие Doctrine-атрибутов
  • 01:15:03 Подсчёт полей класса и параметров конструктора
  • 01:18:31 Подключение правила к проекту
  • 01:19:58 Что бы было со стандартным
  • 01:21:16 Что у нас получилось

Этим мы сэкономим себе много времени для этого и последующих обновлений на новые версии PHP.

Скрытый контент (код, слайды, ...) для подписчиков. Открыть →
Дмитрий Елисеев
elisdn.ru
Комментарии (6)
Артём

Дмитрий, как же вы вовремя с этой темой, спасибо! Сегодня будет интересный вечер :)

Ответить
Максим

Да, тема полезная, я вот всё жду урок по RabbitMQ...

Ответить
Ник

+1!)

Ответить
Руслан

Спасибо!

Ответить
Arunas

Спасибо

Ответить
Денис

Дмитрий, большое спасибо, жду урок по асинхронному CQRS. Добавьте пожалуйста дату создания и дату обновления каждого урока, чтобы было удобнее искать эти конкретные правки из этого урока в репозитории.

Ответить
Зарегистрируйтесь или войдите чтобы оставить комментарий

Или войти через:

Yandex
MailRu
GitHub
Google