Что нового в PhpStorm 2020.2

Поддержка объединенных типов из PHP 8, обновленный механизм анализа потока управления для PHP, рефакторинг Extract Class, полная поддержка пул-реквестов GitHub, виджет инспекций и поддержка OpenAPI.

Объединенные типы из PHP 8

Мы начинаем представлять функциональность для PHP 8 с поддержки объединенных типов (Union Types). В PHP 8.0 будет возможно объявить более одного типа для свойств, аргументов и возвращаемых значений. PhpStorm уже полностью поддерживает эту возможность и поможет вам эффективно мигрировать на новую версию языка.

Преобразование PHPDoc в нативные объединенные типы

Преобразование PHPDoc в нативные объединенные типы

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

Теперь их можно преобразовать в нативные объединенные типы при помощи быстрого исправления (Alt+Enter).

Это сработает везде, где применимы объединенные типы: в аргументах, свойствах и возвращаемых значениях. Для свойств PhpStorm также учитывает значения по умолчанию.

Переключение на PHP 8

Переключение на PHP 8

Чтобы включить поддержку PHP 8, измените версию языка в IDE одним из этих способов:

  • Используйте быстрое исправление Alt+Enter прямо в редакторе.
  • Перейдите в меню Preferences | Languages & Frameworks | PHP и выберите нужный вариант в списке PHP language level.
  • Укажите требуемую версию PHP в файле composer.json, и PhpStorm переключится на нее автоматически.
Валидация типов

Валидация типов

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

Проверки работают на уровнях свойств, аргументов и возвращаемых значений.

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

Обнаружение избыточных типов и дубликатов

Обнаружение избыточных типов и дубликатов

Многие комбинации типов недопустимы или избыточны. Например:

  • bool|false
  • Foo|Foo
  • object|User
  • iterable|array и iterable|Traversable

PhpStorm подсвечивает их все.

Работа с типами, допускающими значение null

Работа с типами, допускающими значение null

При наличии единственного типа, допускающего значение null, в PHP 8 разрешается использовать запись ?Type либо Type|null.

Но когда таких типов несколько, запись ?Type1|Type2 запрещена как неоднозначная.

PhpStorm подсвечивает такие нарушения и дает возможность их исправить через Alt+Enter.

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

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

При наследовании в PHP можно изменять типы, соблюдая следующие правила:

  • Типы параметров контравариантны, то есть могут быть расширены.
  • Типы возвращаемого значения ковариантны, то есть могут быть только сужены.
  • Типы свойств должны приводиться к одному типу.

С PhpStorm вам не нужно запоминать эти правила, так как IDE проверяет код и выявляет любые нарушения.

Псевдотип false

Псевдотип false

В PHP 8 появится специальный псевдотип false, который можно использовать только в объявлениях объединенных типов.

Он широко используется в стандартной библиотеке (см., например, strpos() или array_search()) и может применяться в других местах для обозначения отрицательного результата.

PhpStorm подсвечивает неправильные использования и учитывает вывод типов.

Удаление лишних комментариев PHPDoc

Удаление лишних комментариев PHPDoc

При добавлении объявления нативного объединенного типа комментарий PHPDoc больше не понадобится, так как в нем нет никакой дополнительной информации.

Удалите его с помощью быстрого исправления Alt+Enter.

Обновленный механизм анализа потока управления

Условие всегда истинно

Условие всегда истинно

PhpStorm теперь анализирует сложные ветви кода и определяет, имеет ли смысл условие в блоке if-else или оно избыточно.

Результат проверки instanceof всегда истинный

Результат проверки instanceof всегда истинный

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

Новое действие: информация о типе

Новое действие: информация о типе

С помощью нового действия можно посмотреть выведенный тип для любого выделенного выражения.

Выделите интересующее вас выражение и нажмите Ctrl+Shift+P или перейдите в меню View | Type Info, чтобы узнать его тип.

Выражение всегда возвращает null

Выражение всегда возвращает null

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

Инструменты контроля качества кода

Инструменты контроля качества кода
  • Теперь можно запускать инструменты контроля качества через Docker Compose.
    Для этого перейдите в настройки Preferences/Settings | Languages & Frameworks | PHP и добавьте новый удаленный интерпретатор на основе Docker Compose.
  • Изменение форматирования для PHP-CS-Fixer и PHPCBF теперь тоже можно запускать через удаленный интерпретатор.
  • Если в файле ruleset.xml PHP_CodeSniffer есть раздел exclude-pattern, PhpStorm не будет анализировать файлы по указанному пути.

Поддержка Composer

Управлять зависимостями Composer можно прямо в редакторе в файле composer.json.

Поддержка пользовательских пакетов Satis/Packagist

Поддержка пользовательских пакетов Satis/Packagist

Если в разделе repositories указаны пользовательские пакеты, для них будет работать автодополнение.

Кроме того, в редакторе есть значок, показывающий текущее состояние кэширования пользовательских репозиториев.

Автодополнение для пакетов с несколькими версиями

Автодополнение для пакетов с несколькими версиями

Если пакет имеет несколько версий, разделенных запятой или знаком ||, PhpStorm предоставляет автодополнение для всех доступных версий пакета.

Раньше автодополнение отключалось после ввода ~, ^ или >=. Теперь оно работает как надо с любым из этих ограничений диапазона в composer.json.

Быстрый доступ к настройкам инструментов, добавленных в качестве зависимостей

Быстрый доступ к настройкам инструментов, добавленных в качестве зависимостей

PhpStorm поддерживает интеграцию со множеством внешних инструментов. Теперь, если поддерживаемый инструмент объявлен в composer.json, рядом с ним появится значок гаечного ключа. Нажмите на значок, чтобы напрямую перейти к соответствующему разделу настроек.

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

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

Если класс перегружен и берет на себя слишком много, его можно преобразовать и вынести методы и свойства в новый класс с помощью рефакторинга Extract Class.

Выберите функцию, метод или свойство, которые нужно переместить, нажмите Ctrl+T и выберите Extract class.

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

Инструменты командной строки

Инструменты командной строки

Для инструментов командной строки PHP появилась поддержка удаленных интерпретаторов.

Добавьте новую запись инструмента в настройках Preferences/Settings | Tools | Command Line Tool Support и выберите один из настроенных удаленных интерпретаторов.

Laravel Artisan теперь обнаруживается автоматически. А значит, открывая проект Laravel, вы можете нажать Ctrl-Ctrl и начать вводить команду. Автодополнение PhpStorm предложит доступные команды.

Новые инспекции

Массив используется только для записи

Массив используется только для записи

Если где-то объявлен и обновляется массив, который никогда не читается, с большой вероятностью такой массив необязателен и только утяжеляет код.

Инспекция находит такие случаи и предлагает удалить массив, чтобы сделать код чище.

Типизированное свойство не инициализировано

Типизированное свойство не инициализировано

Если типизированное свойство не имеет значения по умолчанию, оно считается неинициализированным. Чтение неинициализированных свойств приводит к ошибке TypeError (если не определен магический __get()).

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

Полная поддержка пул-реквестов GitHub

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

Полная поддержка пул-реквестов GitHub

Для начала работы с пул-реквестами откройте окно Pull Requests с панели инструментов или из главного меню VCS | Git | View Pull Requests.

Выберите из списка пул-реквест, чтобы просмотреть всю информацию о нем: сообщение, имя автора, названия веток и и т. д.

Отсюда вы можете начать процесс ревью: проверить измененные файлы и оставить комментарии как к коммитам, так и к отдельным строкам.

Вы также можете выполнить merge пул-реквеста прямо из IDE. Не нужно создавать локальную ветку из пул-реквеста — все работает автоматически.

Поддержка OpenAPI

PhpStorm 2020.2 поддерживает плагин OpenAPI Specifications, разработанный в JetBrains. Этот бесплатный плагин предоставляет функции автодополнения, навигации и валидации для файлов спецификации OpenAPI (openapi.yaml/openapi.json и swagger.yaml/swagger.json).

Поддержка OpenAPI

Возможности плагина:

  • Интеграция с интерфейсом Swagger.
  • Генерация кода.
  • Просмотр структурных различий между спецификациями OpenAPI.
  • Значки в редакторе для создания HTTP-запросов на основе спецификации.
  • Автодополнение конечных точек в HTTP-клиенте.

Виджет инспекций и окно Problems

Виджет инспекций и окно Problems

В верхнем правом углу редактора появился виджет, который сообщает о проблемах в текущем файле.

  • Перемещайтесь между проблемами с помощью стрелок (или нажимая F2 / Shift+F2).
  • Нажмите на виджет, чтобы просмотреть список всех проблем с текущим файлом в окне Problems.
  • Наведите курсор мыши на виджет, чтобы открыть меню настроек и указать, какие проблемы следует подвечивать.

Поддержка веб-технологий

В новую версию PhpStorm вошли все функции и улучшения из WebStorm 2020.2. Некоторые поддерживаются по умолчанию, другие — через бесплатные плагины, которые можно скачать из Plugin Marketplace.

Prettier в качестве форматера по умолчанию в JavaScript-проектах

Форматирование кода с помощью Prettier стало еще удобнее. Просто отметьте галочкой новую опцию On code reformat в настройках, и PhpStorm будет использовать Prettier вместо встроенного форматера. По умолчанию это работает только для файлов .js, .ts, .jsx и .tsx, но вы можете легко добавить другие типы файлов.

Первоклассная поддержка Vue

В этой версии вас ждет поддержка Nuxt.js, настройки стиля кода для Vue, улучшенная обработка Vue-файлов в TypeScript-проектах и многое другое, что мы реализовали за последний год. Работать с проектами Vue в PhpStorm стало еще удобнее.

Новые возможности для JavaScript

Новые intention-действия (Alt+Enter) сэкономят ваше время. Например, можно быстро преобразовать цикл for с числовым индексом в перебирающий метод forEach. Кроме того, стало проще просматривать документирующие комментарии в файлах JavaScript и TypeScript: мы сделали рендеринг прямо в редакторе — теперь все аккуратнее.

Контроль версий

Поддержка Git в WSL 2

Поддержка Git в WSL 2

PhpStorm 2020.2 поддерживает Git, установленный в WSL2, для работы над проектами, расположенными в файловых системах Linux или Windows.

IDE переключается между исполняемыми файлами Git в зависимости от расположения проекта. При открытии проекта из WSL2 (по пути \\wsl$) PhpStorm автоматически переключится на Git в WSL, и вы сможете пользоваться всей функциональностью IDE, связанной с Git.

Обновленный интерфейс для сравнения веток

Если вам нужно сравнить две ветки, чтобы посмотреть, какие коммиты не принадлежат друг другу, PhpStorm 2020.2 покажет список коммитов не в окне Git, а в редакторе: там достаточно места для отображения всей необходимой информации.

Выберите действие Compare with Current во всплывающем меню VCS | Branches.

Удаление коммита

Удаление коммита

Теперь можно легко удалить лишние локальные коммиты: выберите их на вкладке Log в окне Git и нажмите Drop Commit в контекстном меню.

Объединение локальных коммитов

Объединение локальных коммитов

Также возможно объединить несколько локальных коммитов в один, например, чтобы очистить историю перед отправкой на сервер.

Выберите коммиты в окне Git нажмите Squash Commits… в контекстном меню.

IDE автоматически выполнит интерактивное перебазирование.

Инструменты для работы с базами данных

Узнайте, что нового в DataGrip — там вы найдете подробную информацию об улучшениях для работы с базами данных в PhpStorm.

Редактор больших значений

Редактор больших значений

Если в ячейке длинное значение, его удобно просматривать и редактировать в отдельной панели, которая поддерживает режим переноса строк (переключается на правой панели инструментов).

Подсветка Google BigQuery

Подсветка Google BigQuery

В списке диалектов пополнение: Google BigQuery. Это пока еще не полноценная поддержка базы, а только правильная подсветка кода. Соответственно, для запуска запросов не надо выделять код, IDE сама определит, что нужно запустить.

Предпросмотр запроса при редактировании

Предпросмотр запроса при редактировании

Прежде чем записать новые значения в редакторе данных, можно посмотреть, какой запрос будет выполнен — нажмите кнопку DML на панели инструментов. Это не именно тот запрос, который запустится, потому что для редактирования данных PhpStorm использует JDBC-драйвер. Но в большинстве случаев, вы увидите то, что реально запустится.

Другие улучшения

  • Кастомизация функций get и set
  • Resolve для нескольких проектов в одном окне
  • Новое действие: добавление нескольких курсоров в конец выбранных строк