Что нового в PhpStorm 2021.3

PhpStorm 2021.3 — последнее в этом году крупное обновление, в котором реализована поддержка недавно вышедшей версии PHP 8.1, усовершенствована обработка дженериков в PHP, обновлен HTTP-клиент, появились новые возможности развертывания и управления версиями.

PHP 8.1

Выпущена новая версия интерпретатора. Смотрите видеообзор новых возможностей языка, подготовленный Брентом Рузом и участниками PHP-сообщества.

Перечисления

Перечисления — одна из самых долгожданных возможностей PHP 8.1.

Поддержка перечислений появилась уже в PhpStorm 2021.2: IDE предлагает варианты автодополнения, а валидация защищает от их неправильного использования.

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

Свойства только для чтения

Readonly properties are the properties that cannot be changed after initialization, that is, after a value is assigned to them.

PhpStorm 2021.3 поможет правильно использовать такие свойства.

Специальная инспекция проверит, инициализировано ли свойство только для чтения в том диапазоне, в котором оно было объявлено, будь то в объявлении самого свойства или в методе класса.

Поскольку свойства только для чтения должны быть обязательно типизированы, PhpStorm проверит, указано ли объявление типа.

Свойство только для чтения не может иметь значения по умолчанию, но его можно инициализировать в конструкторе как promoted-свойство, и в PhpStorm есть для этого быстрое исправление.

Оператор `new` в инициализаторах

В PHP 8.1 можно использовать оператор new при инициализации значений параметров по умолчанию, статических переменных, глобальных констант и аргументов атрибутов.

PhpStorm проверяет такие использования и подсвечивает недопустимые случаи, например предоставление нового объекта как свойства или константы класса.

Упрощенный синтаксис callable-ссылок

В PHP 8.1 можно получить ссылку на любую функцию, используя упрощенный синтаксис callable-ссылок. Теперь не нужно писать $fn = Closure::fromCallable('strlen');, а можно использовать более короткую форму $fn = strlen(...);. При нажатии Alt+Enter PhpStorm выполнит быстрое исправление и преобразует код в новый синтаксис.

Чистые типы пересечений

В PHP 8.1 появились типы пересечений, значение которых должно удовлетворять ограничениям нескольких типов, а не одного.

Теперь PhpStorm предлагает автодополнение для этих конструкций и проверяет, не комбинируется ли тип пересечения с типом объединения. Если тип пересечения указан как аннотация PHPDoc, PhpStorm тоже правильно его интерпретирует.

Новый тип never для возвращаемых значений

В PHP 8.1 появился тип never для возвращаемых значений. Если функция объявлена с типом never, она не вернет значение и либо выдаст исключение, либо завершит выполнение скрипта, как это делают функции die(), exit() или trigger_error().

Конечные константы

В PHP 8.1 можно объявить константы класса final так, что их нельзя переопределить в дочерних классах. PhpStorm проверяет такие случаи.

Устаревший синтаксис

В PHP 8.1 не только появились новые возможности, но и прекращена поддержка некоторых старых. Это сделано, чтобы язык был более последовательным, и с ним было проще работать. PhpStorm поможет найти устаревший код. Вот два примера:

Прекращение использования интерфейсов Serializable

Вместо интерфейсов Serializable рекомендуется использовать magic-методы __serialize() и __unserialize(). В PHP 8.1 интерфейсы Serializable еще можно использовать, но только если реализующий их класс использует и __serialize(), и __unserialize(). PhpStorm 2021.3 подсвечивает неверный код и предлагает быстрое исправление через Alt+Enter, добавляющее magic-методы.

Ограниченное использование GLOBALS

Использование суперглобальной переменной $GLOBALS в PHP 8.1 ограничено: запрещается выполнять операции записи или чтения/записи над самой переменной $GLOBALS. PhpStorm подсвечивает неверные использования.

Дженерики в PHP

PHP пока не поддерживает дженерики на уровне языка, но они уже очень широко используются с помощью аннотаций. Их применение делает код более безопасным и предсказуемым при работе с коллекциями, контейнерами, фабриками и другими приложениями. В PhpStorm 2021.3 добавлена поддержка дженериков с помощью аннотации @template.

Улучшенная поддержка коллекций Doctrine

В PhpStorm появилась поддержка интерфейса IteratorAggregate, и теперь итерация по коллекциям Doctrine работает автоматически.

Поддержка коллекций Laravel

In the upcoming Laravel release, the illuminate/collections package will support generics annotations. PhpStorm 2021.3 обеспечивает более качественное автодополнение кода для таких коллекций.

Вывод типов дженериков из конструктора

Если в конструкторе есть параметр дженерика @template и вы хотите указать тип, передав объект как аргумент, новая версия PhpStorm выведет правильный тип и предоставит автодополнение.

Рефакторинги

Перетаскивание классов

Раньше переместить класс и обновить его пространство имен можно было только с помощью рефакторинга перемещения (F6) в редакторе кода. В PhpStorm 2021.3 можно просто перетащить класс в нужное место на панели Project. В процессе вам будет видна структура проекта. Более того, таким способом можно перетащить несколько классов и даже целые папки, и PhpStorm правильно обновит все ссылки.

Inline function и Inline method

Рефакторинг Inline method позволяет заменить вызовы метода его содержимым, а сам метод удалить. В PhpStorm 2021.3 этот рефакторинг значительно улучшен и может использоваться в большем числе случаев. Например, добавлена поддержка нестатических методов, цепочек методов и стрелочных/анонимных функций, переданных как параметры.

Чтобы использовать этот рефакторинг, поместите курсор на метод и нажмите Ctrl+Alt+N. Если какой-то закрытый метод используется в коде только один раз, нажмите Alt+Enter и примените новое быстрое исправление Inline Method.

Встраивание переменной

Рефакторинг Inline variable позволяет заменить ссылки на переменную фактическим значением переменной. В PhpStorm 2021.3 этот рефакторинг поддерживает встраивание переменных NOWDOC/HEREDOC, и пользоваться им стало удобнее.

Кроме того, PhpStorm теперь находит переменные, использованные только один раз, и предлагает для них быстрое исправление Inline Variable. Чтобы применить его, нажмите Alt+Enter.

Развертывание

Поддержка rsync

Используя для развертывания SFTP-сервер, можно включить rsync для скачивания и загрузки файлов и папок. Это позволяет значительно увеличить скорость передачи данных. Соответствующий параметр Use rsync for download/upload находится в разделе Advanced настроек сервера развертывания.

Путь к исполняемому файлу rsync можно задать в меню Settings/Preferences | Tools | Rsync. В macOS и Linux он будет доступен сразу. For Windows, it is recommended to use Cygwin and OpenSSH.

Повторная передача файлов, которые не удалось загрузить

PhpStorm 2021.3 позволяет повторно передать файлы, которые не удалось загрузить. В таких случаях нужно нажать ссылку Retry в окне File Transfer.

Поддержка прокси для подключений по SSH

Теперь вы можете указать для конфигурации SSH прокси-сервер HTTP или SOCKS. Для этого перейдите в Settings/Preferences | Tools | SSH Configurations.

Кроме того, можно использовать глобальный прокси-сервер, единый для всей IDE. Для этого поставьте флажок Use global IDE proxy settings и введите данные прокси-сервера в Settings/Preferences | Appearance & Behavior | System Settings | HTTP Proxy.

Быстрая смена сервера по умолчанию для проекта

В PhpStorm 2021.3 появился новый виджет строки состояния, который показывает текущий сервер по умолчанию. Если вам приходится работать с несколькими окружениями, переключаться между ними можно прямо в этом виджете, не заходя в настройки.

HTTP-клиент

Ответы в виде двоичного кода в HTTP-клиенте

Новая версия HTTP-клиента поддерживает ответы в виде двоичного кода. Если пришел ответ в виде изображения, в консоли ответа появится превью.

Перенаправление вывода в заданный файл или директорию

В новой версии в HTTP-клиенте можно настроить перенаправление вывода в заданный файл или директорию. Для принудительного и мягкого перенаправления используются два оператора:

  • оператор >> всегда создает новый файл, добавляя к его имени суффикс -n, если такой файл уже существует;
  • оператор >>! перезаписывает файл, если он уже существует.

Помимо явных путей к файлам, теперь можно использовать новые предопределенные переменные: {{$projectRoot}} указывает на корневую папку проекта, а {{$historyFolder}} на папку истории запросов.

Поддержка идентификаторов HTTP-запросов

В PhpStorm 2021.3 HTTP-запросам можно присваивать имена. Идентификаторы можно добавлять либо в виде комментариев с использованием @name, либо в виде текста в разделителе запросов (###).

В дальнейшем имена можно использовать для вызова запросов из окна Services, а также из диалогов Run Configuration, Run Anything и Search Everywhere.

Взаимодействие с IDE

Новое окно Bookmarks

Мы объединили функциональность Favorites и Bookmarks. Теперь Bookmarks служит единым окном, в котором отображаются все закладки. Чтобы добавить в закладки строку, файл или папку, нажмите F11.

Предпросмотр исходного кода в окне Show Usages

В диалоге Show Usages, который можно вызвать нажатием Ctrl+щелчок по символу, теперь доступен предпросмотр исходного кода для найденных использований. Чтобы посмотреть превью, нажмите кнопку Icon of the toolbar button на панели инструментов.

VCS

Выравнивание строк в сравнении

Мы добавили в настройки экрана Diff новый параметр Align Changes Highlighting. Чтобы перейти к настройкам, нажмите значок шестеренки. Эта настройка упрощает чтение информации на экране Diff, особенно при сложных изменениях: она выравнивает строки без изменений, чтобы они отображались друг рядом с другом. В результате вы четко видите, какой код был добавлен или удален.

Функция Checkout and Rebase onto Current для удаленных веток

Функция Checkout and Rebase onto Current позволяет извлечь выбранную ветку и переместить ее на вершину ветки, в которой вы находитесь. Раньше это действие можно было использовать только локально, а теперь оно работает и для удаленных веток.

Новое действие Push All up to Here

Бывает, что несколько коммитов готовы к отправке, а над другими вы еще работаете. В таких случаях удобно передать на сервер только те, работа над которыми завершена. PhpStorm 2021.3 позволяет отправить в удаленный репозиторий все коммиты вплоть до коммита, выбранного во вкладке Log окна Git. Выберите нужный коммит, щелкните по нему правой кнопкой и примените действие Push All up to Here.

Реорганизация настроек системы контроля версий

Мы переработали страницу Version Control в Settings/Preferences: теперь на ней размещены все доступные настройки. В узле Git настройки разбиты на разделы, соответствующие основным процессам: Commit, Push и Update. Добавлен узел Directory mappings, а узел Background удален, поскольку фоновые операции теперь включены по умолчанию.