Рады представить вам первый мажорный релиз PhpStorm в этом году! Под катом подробный разбор всех изменений и новых возможностей.

PHP



IDE



Docker



Version Control



Code With Me


  • Новый инструмент JetBrains для парного программирования доступен для пользователей PhpStorm бесплатно. Code With Me предлагает совместное программирование в реальном времени, встроенные аудио- и видеозвонки и мессенджер.


Скачать PhpStorm 2021.1 можно на сайте или в Toolbox App.

Это вкратце, а теперь подробнее обо всем.

PHP


Выбор версии PHP через статусбар


В предыдущем релизе мы добавили индикатор версии PHP в строке состояния. В 2021.1 версию можно менять независимо от той, которая указана в composer.json. Это позволит, к примеру, быстро проверять совместимость кода с более новыми версиями PHP.




Легкий поиск настроек PHP


Большинство настроек, связанных с PHP, теперь доступны в Settings / Preferences | PHP.




Просмотр PHP- и HTML-файлов в редакторе


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

Теперь здесь также появилась иконка PhpStorm. При нажатии на нее файл откроется для предварительного просмотра прямо в редакторе.

Превью работает с HTML- и PHP-файлами, а также со всеми связанными CSS- и JavaScript-файлами.



Откройте файл и начните печатать — во вкладке предварительного просмотра мгновенно отобразятся все изменения.

PhpStorm использует локальный интерпретатор PHP, который можно указать для проекта в Settings/Preferences | PHP. Docker и другие нелокальные интерпретаторы пока не поддерживаются.

Если иконок в редакторе нет, необходимо убедиться, что в разделе Preferences | Tools | Web Browsers выбран хотя бы один браузер и отмечен чекбокс For HTML files.

Также открыть вкладку превью можно комбинацией Alt+F2.


Использование префикса таблиц в SQL-запросах


Многие CMS и фреймворки позволяют задавать префикс для таблиц. Это может быть полезно при использовании одной и той же базы данных для нескольких приложений.

Раньше при этом терялась интеграция с инструментами БД, потому что имена таблиц формировались динамически.

Теперь вы можете указать префикс в файле .phpstorm.meta.php. Подробнее о метафайлах и о том, как указывать префиксы таблиц, можно прочитать на странице хелпа.

Допустим, у нас есть следующий запрос в приложении на Drupal:





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

Чтобы исправить это, добавим в проект файл .phpstorm.meta.php с вот таким содержимым:

namespace PHPSTORM_META {
 override(
  // Виртуальная функция для указания замен в SQL-запросах
   sql_injection_subst(),
   map([
     '{' => "PS2021_", // все `{` в строках SQL будут заменены на префикс
     '}' => '',       // все символы `}` будут заменены пустой строкой
   ]));
}


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



Кстати, если запрос формируется через конкатенацию, то это тоже сработает:

<?php
const DB_PREFIX = "mydatabase_";
$sql = "SELECT * FROM " . DB_PREFIX . 'table_name';


Инспекции и квик-фиксы


В этом релизе мы добавили более 20 различных проверок и квик-фиксов, которые помогут предотвратить ошибки на ранних стадиях разработки. Посмотреть полный список инспекций и настроить их можно в Settings / Preferences | Editor | Inspections.

При возникновении проблемы, наведите на нее курсор, нажмите Alt+Enter и выберите предлагаемый быстрый фикс.

А теперь подробнее о некоторых новых инспекциях.

Упрощение блоков `if` с одинаковыми телами


Некоторые блоки if и else могут оказаться избыточными. Например, вы могли их изменять, в результате чего их тела оказались полностью или частично одинаковыми.

PhpStorm обнаружит такие лишние блоки и предложит их устранить:





Причем, если повторяется только часть тела, PhpStorm предложит извлечь только ее:



Инверсия `if`


Если нажать Alt+Enter для любого if, вам будет предложена команда “Invert `if` statement”. Она изменяет условие на противоположное и вносит необходимые коррективы для сохранения логики.

Если вы любите использовать ранний return, то эта инспекция очень пригодится вам при рефакторинге кода.

Например:



В циклах это тоже работает:


Замена `isset` на ??


Код isset($a) ? $a : $b; идентичен $a ?? $b, поэтому PhpStorm подсветит его и предложит квик-фикс для замены.



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

Для этого выберите в меню Code | Run Inspection by Name... и укажите нужную инспекцию, например `isset` can be replaced with coalesce. Все найденные использования можно будет поправить непосредственно в результатах поиска.

Замена `isset` на `!== null`


Использование isset() имеет смысл только для массивов и переменных. Во всех остальных случаях лучше проверить операнд на null.

PhpStorm подсветит такие места и позволит вам с помощью Alt+Enter заменить isset() на сравнение с null.



Переменная в `foreach` затирает уже объявленную переменную


Переменные для ключа и значения в цикле foreach могут конфликтовать с именами других переменных или параметров.

Проблема в том, что PHP не имеет для них отдельной области видимости. То есть значение будет переопределено — вероятно, вопреки ожиданиям.

PhpStorm подсветит такие места, потому что это потенциальные источники багов.



Ненужные фигурные скобки для переменных внутри строк


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



Упрощение булевых выражений


Если булево выражение содержит литералы true или false, то его наверняка можно упростить и сделать более читаемым.

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



Строгое сравнение с несовместимыми типами


Оператор === всегда вернет false, если операнды не совпадают по типу.



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



Небезопасные ссылки http://


Использование протокола http:// в строках теперь подсвечивается. IDE предлагает квик-фикс для быстрой замены http:// на https:// (по Alt-Enter). Также с его помощью можно добавить URL в список игнорируемых ссылок.



Подозрительные комбинации имен


PhpStorm подсвечивает некоторые типичные ошибки именования параметров или возвращаемых значений, например $needle и $haystack или $x и $y.

Обычно такие ошибки являются признаком бага либо, как минимум, очень путают.



Замена `define` на `const`


PhpStorm выявляет случаи, когда объявление константы через define можно заменить на более легкочитаемый синтаксис const. C помощью Alt+Enter можно сделать замену.



Конфигурация инспекций перед коммитом


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

Нажмите на значок шестеренки, отметьте чекбокс Analyze code, нажмите Configure и выберите нужный профиль.



Создать свои профили можно в Settings / Preferences | Editor | Inspections.

Прочее


Искусственный скоуп для рефакторинга


Циклы foreach, for, while и блоки catch в PHP не имеют изолированной области видимости. Это довольно неудобно, когда вы переименовываете переменные, потому что при этом также переименовываются переменные и за пределами нужного блока.

В PhpStorm 2021.1 мы добавили искусственный скоуп для всех подобных блоков. Теперь при вызове рефакторинга Rename (Shift+F6) переименование будет более интуитивным.




Улучшение автоматической инъекции языка


Прошлые версии PhpStorm умели определять язык только для аргументов. Например, если вы передавали строку в функцию preg_*, она подсвечивалась как регулярное выражение.

Но вот если вы использовали переменную, то ее значение никак не подсвечивалось.

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




Использование расширений из блока `suggest` в composer.json


В кодовой базе могут быть классы из расширений PHP. До сих пор PhpStorm проверял, добавлены ли эти расширения в секции require в файле composer.json.

PhpStorm 2021.1 учитывает указание расширений не только в секции `require`, но и в секции `suggest`.

Еще важнее то, что PhpStorm теперь предупреждает в случае, если расширение было добавлено в suggest в composer.json, но при этом используется без проверок типа extension_loaded() или function_exists().

Специальный квик-фикс позволит добавить расширение в require/require-dev.



Важные исправления


Мы исправили более 2400 тикетов, открытых нашими пользователями и командой JetBrains в трекере PhpStorm. Вот некоторые из самых интересных:
  • Теперь можно отлаживать проекты в WSL 2 через Docker (WI-53396).
  • Quality tools теперь правильно используют пути с docker-compose в exec-режиме (WI-55840).
  • Большие файлы PHP (5000 строк кода и больше) стали обрабатываться корректно (WI-31569).
  • Значительно улучшена производительность для проектов с алиасами (WI-58306).


Code With Me


Code With Me — это новый инструмент JetBrains для совместной разработки и парного программирования. Изначально мы представили его в PhpStorm 2020.3. В этом релизе инструмент был во многом улучшен.



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

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

В-третьих, добавлены встроенные голосовые и видеозвонки, а также мессенджер.

Энтерпрайз-команды и другие команды с повышенными требованиями по безопасности теперь могут запустить свой сервер Code With Me в приватной сети.

Подробнее о Code With Me читайте на сайте JetBrains.

IDE


Раскрытие вкладок в режиме Split


Открыть одновременно несколько вкладок в режиме Split можно просто перетянув вкладку в нужный угол экрана.

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




Поддержка JSONPath


Теперь можно использовать запросы JSONPath для быстрого поиска по большим JSON-документам. Возможность доступна в разделе Edit | Find | Evaluate JSONPath.




Поддержка формата JSON Lines


Теперь PhpStorm поддерживает формат JSON Lines для работы со структурированными данными и логами. IDE распознает файлы .jsonl, .jslines, .ldjson и .ndjson.




Настройки типографики


Вы можете варьировать основной и запасной шрифты. Новые опции доступны в разделе Typography Settings в Settings / Preferences | Editor | Fonts.



Docker


Автодополнение имен образов в Dockerfile


Начните печатать имя образа, и PhpStorm предложит вам список образов, доступных на Docker Hub:



Сворачивание в многоступенчатых файлах Dockerfile


При использовании в Dockerfile нескольких секций FROM вы можете свернуть любую из них, и они будут разделены линией для лучшей читаемости.



Cancel Docker run


Вы можете легко остановить исполнение запущенного Dockerfile из окна Services. Выберите Stop Deploy в контекстном меню для запущенного элемента.


Улучшения для пул-реквестов GitHub


Чтобы создать пул-реквест, просто нажмите на значок «+» в окне Pull Requests или перейдите в меню ?Git | GitHub | Create Pull Request.

В обновленном диалоге можно:
  • Выбирать базовые и head-ветки из списка доступных веток.
  • Просматривать измененные файлы на вкладке Files.
  • Редактировать названия и описания пул-реквестов, назначать ревьюеров и исполнителей, добавлять теги.
  • Создавать черновики пул-реквестов.




PhpStorm 2021.1 также поддерживает шаблоны пул-реквестов. Добавьте файл pull_requst_template.md в проект и укажите в нем текст шаблона — и каждый раз, когда вы создаете новый пул-реквест, это описание будет заполняться автоматически.

Поддержка шаблона для Git-коммитов


При создании сообщения для коммита PhpStorm теперь учитывает шаблон, указанный в параметре commit.template вашей конфигурации Git.

HTTP-клиент


Поддержка SSL


Теперь вы можете указать настройки SSL в HTTP-клиенте. Нажмите кнопку Add environment file и выберите Private. Будет создан файл, в котором вы сможете указать настройки SSL: clientCertificate, hasCertificatePassphrase, clientCertificateKey, verifyHostCertificate.




Улучшения для OpenAPI / Swagger


В PhpStorm есть поддержка спецификаций OpenAPI и встроенный Swagger UI.

Теперь же Swagger UI поддерживает спецификации с внешними файлами, подключенными через $ref.



Инструменты БД



PhpStorm включает встроенные возможности DataGrip: интерфейс для работы с правами доступа, контекстные шаблоны Live Templates, упрощенную навигацию и многое другое. Подробнее об этих возможностях читайте в обзоре релиза DataGrip 2021.1 от наших коллег.

Веб



И как всегда, в PhpStorm вошли все обновления из WebStorm 2021.1: более умное автодополнение для JavaScript и TypeScript, расширенная поддержка Stylelint и другое.



А вот видеоролик (на английском), где мы демонстрируем главные фичи этого релиза:


На этом пока все. Будем рады вашей обратной связи — вопросам, пожеланиям, баг-репортам и просто мыслям. Оставляйте их в комментариях ниже.