Что нового в PhpStorm 2020.3

Крупное обновление PhpStorm 2020.3 вводит поддержку PHP 8, PHPStan, Psalm, Tailwind CSS, Xdebug 3 и инструмента для совместной разработки Code With Me.

PHP 8

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

Выбирайте версию языка

Выбирайте версию языка

Теперь вы всегда будете видеть, какая версия PHP используется в проекте. Мы разместили соответствующий индикатор в строке состояния. Здесь вы также можете поменять версию PHP (если в composer.json не прописаны ограничения для версии языка).

Добавление именованных идентификаторов аргументов

Именованные аргументы

Теперь аргументы для функций и методов в PHP 8 можно передать, указав имя параметра. Таким образом вам не нужно задавать опциональные параметры. Кроме того, это обеспечивает самодокументацию вызовов.

PhpStorm поможет:

  • Проверить, что имена аргументов верны.
  • Добавить имена параметров автоматически — при помощи быстрого исправления Alt+Enter.
  • Удалить лишние аргументы.
Преобразование в свойство Promoted

Объявление свойств в конструкторе

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

В PhpStorm вы можете преобразовывать свойства, инициализированные конструктором, в promoted-свойства (и наоборот) с помощью быстрого исправления Convert to promoted property Alt+Enter.

Валидация использования null-безопасных операторов

Оператор null-безопасности

Вместо громоздких условий с проверками на null используйте новый оператор ?->, позволяющий создавать цепочки вызовов со скрытыми проверками каждого элемента на null.

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

Преобразование оператора switch в выражение match

Выражение match

Новое выражение match является типобезопасной и компактной альтернативой оператору switch. Вы можете использовать match как значение — возвращая его или присваивая переменной.

PhpStorm сам определит, можно ли преобразовать блок switch в выражение match, и вы сможете автоматически сделать это при помощи быстрого исправления Alt+Enter.

PhpStorm проследит, чтобы вы правильно использовали новое выражение, и всегда подсветит ошибки.

Новые функции для строк

str_contains(), str_starts_with(), str_ends_with()

В PHP 8 вы можете использовать функцию str_contains(), чтобы определить, является ли строка частью другой строки. PhpStorm 2020.3 укажет вам на все случаи использования strpos(), которые могут быть заменены на str_contains().

Также PhpStorm подсветит вызовы substr(), которые можно заменить на новые более понятные функции str_starts_with() и str_ends_with().

Поддержка других возможностей PHP 8

Поддержка других возможностей PHP 8

  • Завершающие запятые после последнего параметра в вызовах функций и секциях use замыканий.
  • Блок catch без захвата позволит поймать ошибку, не создавая объект исключения.
  • Throw теперь может использоваться как выражение (в стрелочных функциях, операторах объединения со значением null ?? и в тернарном операторе ?:).
  • Чтобы получить полное имя объекта (FQN), вместо get_class($object) используйте $object::class. Быстро применить это исправление можно с помощью Alt+Enter.

Атрибуты в PHP 8

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

Вместо использования аннотаций PHPDoc вы теперь можете указывать метаданные в структурированном виде при помощи атрибутов.

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

Несколько атрибутов PHP 8 доступны прямо в IDE. We also provide them in a composer package jetbrains/phpstorm-attributes, so feel free to add it as a dependency in composer.json.

Атрибут #[Deprecated]

#[Deprecated]

Атрибут аналогичен тегу PHPDoc @deprecated. При помощи него вы можете помечать методы, функции, классы и константы классов, которые планируете убрать в будущих версиях приложения.

Указывайте reason и replacement, чтобы ваши пользователи понимали, зачем нужно обновление. Позвольте им обновлять конструкции автоматически — при помощи быстрого исправления Alt+Enter.

Атрибут #[ArrayShape]

#[ArrayShape]

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

Обратите внимание: чтобы обеспечить совместимость с PHP 7.4 и более ранними версиями, просто запишите все это на одной строке.
#[Immutable]

#[Immutable]

Если вы хотите запретить изменение значений объектов или свойств после инициализации, отмечайте их атрибутом #[Immutable].

Это сделает состояние программы более предсказуемым и упростит отладку.

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

Обратите внимание: чтобы обеспечить совместимость с PHP 7.4 и более ранними версиями, просто запишите все это на одной строке.
Атрибут #[Pure]

#[Pure]

Отмечайте функции, не имеющие побочных эффектов, атрибутом #[Pure] — это поможет PhpStorm анализировать поток выполнения. IDE сама подсветит лишние вызовы чистых функций.

Если вы отметите функцию атрибутом #[Pure], хотя на самом деле она пытается изменить что-то во внешней области, PhpStorm подсветит код как небезопасный.

Встроенные функции PHP, такие как array_merge(), уже размечены PhpStorm.

Атрибут #[ExpectedValues]

#[ExpectedValues]

Используйте этот атрибут, чтобы указать, какие значения функция принимает в качестве параметров и какие возвращает. Это улучшит возможности автодополнения и поможет отследить возможные ошибки.

#[ExpectedValues] — это продвинутая версия expectedArguments() из .phpstorm.meta.php.

Атрибут #[NoReturn]

#[NoReturn]

Отмечайте функции, которые могут завершить выполнение скрипта, атрибутом #[NoReturn]. Это позволит IDE более точно анализировать поток управления.

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

Атрибут #[Language]

#[Language]

Добавляйте этот атрибут к строковым параметрам, содержащим текст на другом языке (RegExp, SQL и др.), и PhpStorm откроет вам некоторые дополнительные возможности.

Поддержка Psalm и PHPStan

Оба статических анализатора являются первоклассными инструментами для подсветки проблем прямо в редакторе кода и поддерживаются в PhpStorm 2020.3. Добавьте их в качестве dev-dependencies в composer.json и включите соответствующую инспекцию, нажав на иконку гаечного ключа рядом с инструментом.

PHPStan и Psalm

PhpStorm также обеспечивает автодополнение для тегов @psalm-*. Он понимает их специальное назначение, поэтому у вас не будет проблем с подсветкой, неопределенными классами и т. д. В большинстве случаев вы можете спокойно убрать из тегов префикс @psalm-. То есть вместо @psalm-return можно использовать @return, а вместо @psalm-param@param.

PhpStorm 2020.3 поддерживает различные psalm-типы, в том числе скалярные, числовые и типы с константами. Поэтому все, что зависит от вывода типов (инспекции, генерация кода и автодополнение), теперь работает еще точнее.

Xdebug 3

Xdebug 3

Xdebug 3 — это обновленный дебаггер PHP. Он работает намного быстрее, и его проще конфигурировать.

Чтобы настроить Xdebug 3, вам всего лишь нужно указать XDEBUG_MODE=debug.

Новый стандартный порт для Xdebug — 9003 (вместо 9000), однако PhpStorm по умолчанию слушает оба порта, чтобы переход был более мягким. Порт и другие настройки Xdebug можно изменить в Preferences/Settings | Languages & Frameworks | PHP | Debug.

Learn more about Xdebug 3 in the Upgrade Guide.

Code With Me

Совместная разработка с помощью Code With Me

PhpStorm 2020.3 поддерживает Code With Me — наш новый сервис для совместной разработки и парного программирования. С помощью него вы и ваша команда можете вместе работать над проектами прямо из своих IDE.

Подробнее о Code With Me

Tailwind CSS

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

PhpStorm 2020.3 поможет вам эффективнее работать с Tailwind CSS.

IDE предложит автодополнение для классов Tailwind, покажет ожидаемый CSS при наведении указателя мыши на код, а также поможет в работе с пользовательскими настройками файлов tailwind.config.js.

HTTP-клиент

Guzzle-запросы через HTTP-клиент

Guzzle-запросы через HTTP-клиент

Guzzle is one of the most popular HTTP clients for PHP. В новой версии PhpStorm вы можете тестировать Guzzle-запросы, не запуская сам код.

Если запрос не поддерживается, на полях редактора появится специальная иконка. Нажмите на нее, и IDE создаст новый вспомогательный файл HTTP с предзаполненными параметрами.

Вы можете поэкспериментировать с запросом и затем сохранить его в проекте как файл .http.

Экспорт HTTP-запросов в cURL

Экспорт HTTP-запросов в cURL

Чтобы преобразовать HTTP-запрос в строку для cURL, нажмите Alt+Enter в редакторе HTTP-запросов и выберите опцию Convert to cURL and copy to clipboard.

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

Редактор

Улучшенная работа с Markdown

Улучшенная работа с Markdown

Диаграммы Mermaid.js и графики теперь отрисовываются внутри IDE. Включить эту функцию можно в Preferences/Settings | Languages & Frameworks | Markdown.

В правом верхнем углу панели предпросмотра есть кнопка Auto-Scroll Preview — с помощью нее вы можете включать и выключать синхронизацию прокрутки с редактором.

Мы добавили множество популярных пресетов для Markdown, которые применяются при переформатировании кода с помощью Ctrl+Alt+L. Настройки находятся в Preferences/Settings | Editor | Code Style | Markdown.

Расширенная проверка правописания

Расширенная проверка правописания

Движок для проверки грамматики теперь поддерживает больше языков и обеспечивает более высокое качество проверки.

PhpStorm подсветит ошибку, и вы увидите всплывающее окно с объяснением и вариантом исправления.

Наведя указатель мыши на подсвеченный текст и нажав Alt+Enter, вы сразу увидите все предложенные варианты (мы убрали вложенные списки).

Разделяйте редактор, перетаскивая вкладки

Разделяйте редактор, перетаскивая вкладки

Организовать расположение вкладок теперь можно, перетаскивая каждую из них в нужную часть экрана.

Также, чтобы открыть новую вкладку в сплит-режиме, вы можете выбрать нужный файл в окне Project (или любом другом окне поиска) и нажать Shift+Enter.

Вкладка предпросмотра

Вкладка предпросмотра

Теперь вы можете просматривать файлы перед открытием в специальной вкладке предпросмотра. Чтобы включить эту функцию, нажмите на значок шестеренки на панели Project и отметьте галочками опции Enable Preview Tab и Open Files with Single Click. Если вы начнете редактировать просматриваемый файл, вкладка превратится в обычную.

IDE

Обновленный диалог Search Everywhere

Обновленный диалог Search Everywhere

Теперь представление результатов во всплывающем окне Search Everywhere (Shift+Shift) организовано немного иначе: результаты группируются не по типу (как было раньше), а по релевантности поисковому запросу.

Теперь Search Everywhere также позволяет выполнять простые арифметические операции. Вы можете ввести математическое выражение и сразу получить результаты вычисления. Так вам не придется отвлекаться на использование калькулятора.

Search Everywhere также позволяет искать в истории Git информацию о ветках и коммитах.

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

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

Объединение окон TypeScript и Problems

Объединение окон TypeScript и Problems

Мы интегрировали языковую службу TypeScript в окно Problems и убрали окно TypeScript. Это значит, что вы можете просматривать все ошибки в одном месте. Действия, которые раньше были доступны в окне TypeScript, теперь можно найти в отдельном виджете строки состояния.

Быстрое создание React-компонентов

Быстрое создание React-компонентов

Если у вас есть нереализованная React-компонента, просто поставьте на нее курсор, нажмите Alt+Enter и выберите опцию Create class/ function component — IDE создаст необходимую конструкцию кода за вас.

Система контроля версий

Поддержка Git-стейджинга

Поддержка Git-стейджинга

В PhpStorm 2020.3 появилась поддержка Git-стейджинга. Чтобы включить ее, зайдите в Preferences/Settings | Version Control | Git и поставьте галочку напротив Enable staging area.

Вы можете возвращаться в окно Commit при помощи Alt+0 и видеть, какие файлы были добавлены, а какие нет.

Добавить файлы на стейджинг можно, нажав на иконку +.

Также можно добавлять на стейджинг лишь некоторые строки файлов: просто нажмите на иконку на полях редактора рядом с нужными изменениями.

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

Узнайте, что нового в DataGrip 2020.3, — вся эта функциональность также доступна в PhpStorm.

SQL для MongoDB

SQL для MongoDB

Теперь можно использовать SQL для запросов к MongoDB. PhpStorm 2020.3 supports SELECT queries with clauses such as JOIN, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT, OFFSET, and all available MongoDB functions except map, reduce, filter, and let. Подробнее об SQL для MongoDB читайте в нашем блоге.

Поддержка Couchbase и новые экстракторы данных

Поддержка Couchbase и новые экстракторы данных

PhpStorm 2020.3 поддерживает сервис Couchbase Query. Также мы добавили два новых формата экспорта: One-Row скопирует выделенные значения в одну строку через запятую, а SQL-Insert-Multirow сгенерирует один INSERT для нескольких строк.