PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое

в 9:37, , рубрики: composer, composer.json, php, phpstorm, phpunit, Блог компании JetBrains, метаданные, покрытие кода, Разработка веб-сайтов

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 1

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

Под катом подробный разбор всех заметных изменений и новых возможностей. Осторожно — много картинок.

Скачать PhpStorm 2020.1 можно на сайте или с помощью Toolbox App. Там же 30-дневная пробная версия. Все продукты JetBrains доступны бесплатно для студентов и разработчиков опенсорсных проектов.

Поддержка composer.json

Все действия по работе с зависимостями теперь доступны непосредственно в файле composer.json и работают прямо в редакторе.

Создать новый файл composer.json можно из контекстного меню или горячей клавишей Ctrl(⌘)+N. Шаблон этого файла находится в настройках Preferences/Settings | Editor | File and Code Templates.

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 2

Управление зависимостями

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

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 3

В поле версии будут предложены доступные версии этого пакета. Пока карет (^) или другой символ для указания диапазона версий придется добавлять вручную, но в следующих выпусках мы это исправим.
Для требований по версии PHP или наличия расширений автодополнение тоже будет работать.

Обновление и установка пакетов

Если файла composer.lock еще нет и пакеты не установлены, то PhpStorm будет подсвечивать название секции require и require-dev. Чтобы установить их, можно нажать кнопку Install в тулбаре над редактором. Или воспользоваться быстрым действием по нажатию Alt(⌥)+Enter и выбрать Install packages.

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 4

А вот если установлены не все пакеты, то PhpStorm подсветит недостающие. Тогда Alt(⌥)+Enter можно вызвать на любом из них и выбрать Update package или Update all packages.

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

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 5

Всю информацию о пакетах и их версиях PhpStorm берет с packagist.org и кеширует.

Навигация к файлам и папкам

Наверняка вы знаете, что по нажатию Ctrl(⌘)+Click и Ctrl(⌘)+B можно переходить к определению сущностей или искать их использования.

В composer.json это тоже будет работать. Если нажать Ctrl(⌘)+Click на пакете, то соответствующая директория будет подсвечена в Project Tree. А если на файле, то он будет открыт в редакторе.

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 6

Нажатие Ctrl(⌘)+Click или Ctrl(⌘)+B на любой ссылке в composer.json ожидаемо откроет ее в браузере.

Автодополнение в секциях autoload(-dev)
Для неймспейсов и путей работает автодополнение на основе информации из классов и структуры директорий проекта.

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 7

Ctrl(⌘)+Click и Ctrl(⌘)+B для перехода к файлам и папкам здесь тоже работает.

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

Во-первых, таким же образом работают переходы к файлам/папкам/методам. Во-вторых, поддерживаются алиасы для команд. И, в-третьих, скрипты можно запускать из редактора нажатием кнопки [play] напротив имени скрипта.

При этом автоматически создается Run-конфигурация. Это значит, что повторно запускать скрипт можно горячей клавишей Ctrl(⌃)+R, что довольно удобно при отладке:

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 8

Установка инструментов качества кода
Если в dev-зависимостях есть FriendsOfPHP/PHP-CS-Fixer, то PhpStorm проверит, включена ли соответствующая инспекция и установлен ли набор правил. Если нет, можно будет вызвать Alt(⌥)+Enter, чтобы всё исправить:

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 9

Улучшения вывода типов PHP

Движок вывода типов — это основа PhpStorm, и в этой версии в нем было сделано несколько заметных изменений.

Подсветка лишних тегов var
Добавлять теги @var — хороший способ подсказать PhpStorm тип переменной. Но мы постоянно улучшаем вывод типов, и некоторые такие объявления вполне могут оказаться избыточными, т. к. PhpStorm уже знает тип переменной.

Такие случаи будут подсвечены, и их можно удалить с помощью квик-фикса Alt(⌥)+Enter -> “Remove var:

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 10

Отслеживание null-типов — сложная задача, и были места, где PhpStorm не справлялся. Теперь в 2020.1 PhpStorm знает, когда переменная может быть null, а когда нет.

Вот примеры:

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 11

Автодополнение для инициализированного массива

Допустим, у вас есть массив с известными элементами, и позже вы пытаетесь итерироваться по нему. Раньше здесь не работало автодополнение, так как информация о типе терялась В 2020.1 всё работает:

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 12

Автодополнение в array_map/array_filter

В теле замыкания, которое передано в функции array_map() и array_filter(), теперь работает дополнение для аргументов.

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 13

Покрытие кода с помощью PCOV и PHPDBG

Строить покрытие кода можно с помощью Xdebug. Но поскольку это прежде всего отладчик, то у него есть приличные накладные расходы. Чтобы ускорить получение отчета о покрытии, можно использовать более легковесные инструменты: расширение krakjoe/pcov или встроенный в PHP 5.6+ PHPDBG.

Оба теперь поддерживаются в PhpStorm. Нужно создать Run-конфигурацию для тестов и в настройках выбрать желаемый драйвер покрытия. Затем запустить тесты с подсчетом покрытия нажав кнопку PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 14:

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 15

Подробнее о различиях в подсчете покрытия между Xdebug, PCOV, and phpdbg можно прочитать в README.

Инструментарий PHPUnit

В недавно вышедшем PHPUnit 9 (и уже 9.1) много возможностей было удалено или объявлено устаревшими. Чтобы ускорить миграцию и предотвратить ошибки, мы добавили пачку инспекций и квик-фиксов.

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 16

Создать новый тест для класса

Вызвав Alt(⌥)+Enter на объявлении класса и выбрав Create New PHP Test можно быстро получить скелет для теста.

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 17

Метаданные

Метаданные в файле .phpstorm.meta.php позволяют предоставить PhpStorm дополнительные сведения о вашем проекте и тем самым улучшить автодополнение кода. Например, эта возможность используется в плагине Symfony и в Laravel IDE Helper.

Больше о возможностях метаданных можно узнать из доклада PHP как инструмент разработки PhpStorm на PHP Russia 2019.

В PhpStorm 2020.1 добавлен ряд улучшений для метаданных.

Индекс параметра в директивах override, map, и type

Раньше с помощью override(), map(), и type() можно было изменить поведение первого аргумента функций. В PhpStorm 2020.1 можно указать произвольный индекс параметра:

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 18

Доступ к свойствам через __get

Если вы получали значения свойств через магический __get(), то информация о типе терялась. Можно было использовать дополнительные теги @var или @property, но не всегда это спасало. Теперь можно указать всё через метаданные.

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 19

Автодополнение ключей в объектах, реализующих ArrayAccess

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

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 20

Кастомные точки выхода

PhpStorm рассматривает функции типа die() и exit() или бросание исключений как завершающие выполнение. Но в приложениях могут быть более сложные точки выхода. Например, простая dd() или функция trigger_error с аргументом E_USER_ERROR.

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

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 21

Иконки для функций, переопределенных через метаданные

Напротив объявлений функций, чье поведение было изменено с помощью override(), exitPoint() или expectArguments(), будет отображаться иконка. Нажатие иконки откроет файл .phpstorm.meta.php, в котором и меняется поведение, т. к. файлов может быть несколько.

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 22

Иконки можно спрятать в Preferences/Settings | Editor | General | Gutter Icons.

Машинное обучение для сортировки списка дополнений

Добавили ранжирование вариантов автодополнения на основе машинного обучения.

Как увидеть ML в действии?

По умолчанию автодополнение с ML отключено. Не хотим, чтобы роботы лишили нас работы! Чтобы включить, надо зайти в настройки Preferences/Settings | Editor | General | Code Completion и включить опции Rank completion suggestions based on Machine Learning и PHP.

Если еще включить опцию Show position changes in completion popup, то тогда в списке автодополнения будет показано, как именно изменился порядок элементов.

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 23

Мы планируем предотвратить восстание машин продолжить работу в этом направлении в следующих версиях.

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

Приватное свойство может быть локальной переменной

Определение свойства будет подсвечено, если оно используется только в одном методе и сразу же в нем перезаписывается. Чтобы исправить, можно вызвать квик-фикс Alt(⌥)+Enter “Replace property with local variable”.

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 24

Лишняя инициализация свойства

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

Неиспользуемый инициализатор будет подсвечен, и его можно удалить квик-фиксом Alt(⌥)+Enter “Remove redundant initializer”.

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 25

Изменить тип свойства в PHP 7.4 в соответствии со значением по умолчанию

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 26

Избыточный тернарный оператор

PhpStorm подсветит тривиальные тернарные выражения и с помощью квик-фикса Alt(⌥)+Enter их можно заменить на более простые:

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 27

Избыточная передача по ссылке

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

Ну а пока, PhpStorm 2020.1 подсветит параметры объявленные как передаваемые по ссылке, но при этом не используемые в качестве таковых. Их можно безопасно удалить квик-фиксом Alt(⌥)+Enter.

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 28

То же самое будет работать и для массивов со ссылкой в foreach-цикле:

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 29

Удалить лишний PHPDoc, в котором только объявление типов теперь тоже довольно просто благодаря соответствующему квик-фиксу.

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 30

Правда, по умолчанию инспекция стоит на уровне Info, то есть подсвечивать не будет. Если вы хотите, чтобы лишние блоки PHPDoc подсвечивались, то для инспекции Redundant PHPDoc comment в Preferences | Editor | Inspections установите уровень Weak Warning или выше.

Обновленный рефакторинг “Move method”

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

Раньше сначала нужно было сделать метод статическим, а потом уже вызвать еще одно действие, чтобы перенести его. В PhpStorm 2020.1 рефакторинг “Move method” переработан в одно атомарное действие. Убрали лишние шаги и попапы, и всё делается за один раз.

Наведите курсор на метод и нажмите F6 (или Ctrl+T, 3). Затем выберите целевой класс и всё готово.

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 31

Чтобы посмотреть все доступные рефакторинги, можно нажать Ctrl+T в любом месте кода.

PHP Debug in HTTP Client

Теперь, чтобы выборочно включать отладку, не нужно возиться с параметрами запроса или ставить расширение в браузере. Достаточно создать HTTP-запрос в файле .http и отправить его командой PHP Debug, которая доступна в меню Alt(⌥)+Enter или по нажатию иконки. В результате к запросу будет автоматически добавлена кука XDEBUG_SESSION.

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 32

И еще несколько мелочей для PHP

@deprecated-элементы отображаются как зачеркнутые в Structure tree view
Ctrl(⌘)+F12

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 33

Подсветка совпадающих тегов <?php / ?>

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 34

Прыжок к открывающей/закрывающей скобке

Shift+Ctrl+M (⌃+M)

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 35

Кастомизация Lexer для Twig

Иногда может понадобиться изменить символы тегов для шаблонов Twig, например если используется еще и Angular, у которого такой же синтаксис.
Сделать это можно в настройках Preferences/Settings | Languages & Frameworks | PHP | Twig.

IDE

Продвинутый корректор правописания и грамматики Grazie

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

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 36

По умолчанию проверки включены для Markdown-файлов.
Можно включить их также для всех строковых литералов, комментариев, блоков PHPDoc и сообщений коммитов.

Для PHP включить можно в Settings/Preferences|Editor | Proofread | Grammar.

Режим LightEdit

Иногда бывает нужно быстро посмотреть/поправить файл и открывать для этого целую IDE кажется слишком, но привычную подсветку и функции иметь хочется. Именно для таких случаев мы работаем над легковесным режимом LightEdit.

Работает это так: если вы открываете файл из командной строки или контекстного меню операционной системы, при этом PhpStorm не запущен, то файл откроется в LightEdit. Ну а если полноценный PhpStorm уже работает, то файл просто откроется в нем.

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 37

JetBrains Mono — шрифт по умолчанию

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 38

Режим Zen

Новый режим сочетает в себе Distraction Free и Fullscreen для глубокого погружения в код.
View | Appearance | Enter Zen Mode

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 39

Интерфейс

Разделение окна терминала

Вместо открытия новых вкладок и переключения между ними, теперь можно разделить экран и открыть несколько сессий в одной вкладке. Для этого из контекстного меню терминала выбрать Split Horizontally / Vertically.

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 40

Тема IntelliJ Light

Светлая тема немного обновлена и унифицирована, чтобы выглядеть одинаково на всех ОС, а ее название сменилось на IntelliJ Light.

Кастомизация статусбара

Из контекстного меню можно выбрать, какая информация будет на нем отображаться.

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 41

Конфигурация

Унифицированная конфигурация SSH

Раньше, если SSH-подключение переиспользовалось в деплойменте, Remote-интерпретаторе или SSH-терминале, его каждый раз приходилось конфигурировать заново.

Теперь все SSH-подключения можно добавлять/редактировать в разделе настроек Preferences/Settings | Tools | SSH Configuration, а затем использовать их многократно там, где они нужны.

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 42

Изменился путь к конфигам IDE

Например, на macOS:

- ~/Library/Preferences/PhpStorm2019.3
+ ~/Library/Application Support/JetBrains/PhpStorm2020.1

Подробнее в хелпе.

Кастомный путь для сохранения Run-конфигураций

Раньше Run-конфигурации хранились в папке .idea, которую многие полностью добавляют в .gitignore (лучше вот так). Теперь можно выбрать любой путь и расшарить Run-конфигурацию с коллегами через систему контроля версий.

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

Чтобы сделать это, в диалоге Run/Debug-конфигурации нужно отметить опцию Store as project file, а по нажатии шестеренки можно выбрать желаемый путь в проекте.

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 43

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

Новый Commit

Окно Commit доступно в немодальном режиме и отображается слева. Таким образом оно не блокирует работу над другими файлами во время подготовки коммита, а на экране помещается больше информации об изменениях.

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

Включается опцией Use non-modal commit interface в Preferences / Settings | Version Control | Commit.

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 44

Улучшения для работы с ветками Git

В нижнем правом углу окна IDE указана текущая ветка Git. Если нажать на нее, то откроется окно VCS | Git | Branches.
Здесь добавили поле для поиска. Кнопка Refresh обновляет список remote-веток. И для каждого коммита добавлен индикатор: входящий (синий) или исходящий (зеленый).

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 45

Переработан интерактивный Rebase

Git Rebase позволяет переписать историю коммитов. Теперь можно быстро избавиться от «временных» коммитов, поправить сообщение или порядок коммитов. Конечно, всё это можно сделать и из консоли вручную, но PhpStorm позволяет тут же смотреть, что было изменено в том или ином коммите.

Чтобы начать, в истории коммитов нужно выбрать желаемый базовый коммит и из контекстного меню выбрать Interactively rebase from here.

PhpStorm 2020.1: поддержка composer.json, инструменты для PHPUnit, покрытие кода с PCOV и PHPDBG, Grazie и другое - 46

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

PhpStorm включает в себя почти все возможности DataGrip «из коробки», так что можно посмотреть обзор релиза DataGrip 2020.1 от наших коллег.

Веб

И, как всегда, все обновления из WebStorm 2020.1 тоже входят в PhpStorm.

Полный список изменений можно найти в очень больших release notes.

Обзор релиза можно также посмотреть на странице “What’s new” и если у вас всего несколько минут, то вот короткий ролик (на английском) с демонстрацией главных фич релиза:

А на этом всё на этот раз. Спасибо, что дочитали до конца! Будем рады вопросам, пожеланиям, баг-репортам и просто мыслям в комментариях.

Берегите себя!
Ваша команда JetBrains PhpStorm

Автор: Роман Пронский

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js