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

-6yqojvrf8elszzjapqtotpddr8.jpeg

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

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

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


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


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

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

7q_ctyb0ra98t0nvyhku-4lt3jm.gif

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

kch8iqtma5aezynhcnigvgx5hqu.gif

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

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

y0oplxbtehhsjn7u7c5wykle_c0.gif

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

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

n7nd83q0v4yjyiqwacfvw6ex-n8.gif

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

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

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

wdsusd9z__iwda_zslbel8yuskm.gif

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

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

rycl_fkxjhtuhgizzifd_ljpppi.gif

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

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

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

2u-pqc-0hanaau6akpnhxs8s3rm.gif

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

ru1yfcix_59hronlqdj5ycurbiy.png

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


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

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

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

qqekiu6d5hlyvnqikdyf5hthri4.gif

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

Вот примеры:

kvlx9ctew_hokdyubmu7afdmnys.gif

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

0smejhrs4-9qp5qwcauscd6f1fg.gif

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

o7dixplyvyjqo9x2eojhv3aonkq.png

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


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

Оба теперь поддерживаются в PhpStorm. Нужно создать Run-конфигурацию для тестов и в настройках выбрать желаемый драйвер покрытия. Затем запустить тесты с подсчетом покрытия нажав кнопку 9ogng6xtagzdx6hqdmguuztmnie.png:

hqlch1kgdb4llrt7x6umviiv3hu.gif

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


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


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

wa2pimcwjefg58zfowlajsdj6ji.gif

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

czmsmbauegjxfyf0q_xc0kfaxf4.gif

Метаданные


Метаданные в файле .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 можно указать произвольный индекс параметра:

heml0pmcpsd8k_ff2ma1tuofo3a.png

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

ufyln7r7_1-rcfz5knwwfewbxww.png

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

wplwrm0risc1lsc6bzduo6pa9do.png

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

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

evasm34g6nk9kry9ulynxbdei-q.png

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

uyrthkjrt_wqayncckw11os_24a.png

Иконки можно спрятать в 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, то тогда в списке автодополнения будет показано, как именно изменился порядок элементов.

heqr0_ljxl7lk7fb4jg922w1s-w.gif

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

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


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

_05hxaroz8mhhyqcvncdghtmpyi.png

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

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

awjvkrbihpqraimlogmnsn5l-pw.png

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

hxdws-t5yt_0zaoi2gn8ilsz5jc.gif

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

ql48hpml8rhv3t_hu9ggivldosm.png

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

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

r5w7gpqie_myyrplga_6ilwvsz0.png

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

w7lirbtspctri0ipatzh_kriguo.png

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

qne-ff56tgwl-lk5nwk9at2cbje.gif

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

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


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

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

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

mfa1l0kssopieiuuvbm8vlgmwza.gif

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


PHP Debug in HTTP Client


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

crvmuclv0hq2ilclxd0mzjdejps.gif

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


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

qpq9ixjs4bhxyzbx5ekcirjgfpk.png

Подсветка совпадающих тегов

u5mnh2_yi5azlnfr4ktr9xzudwa.gif

Прыжок к открывающей/закрывающей скобке
Shift+Ctrl+M (⌃+M)

tbd-jdz7u0e2jmpzseanbv6w0h0.gif

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

IDE


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


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

rubiknxvc-hlfhf8jcvzwr0vsra.gif

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

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

Режим LightEdit


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

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

mh8pz-pufxjuut1csg9pl-uqxwe.gif

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


_hirrtrysc0vfilgohr4_de2nvq.png

Режим Zen


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

k0nqvidoxevcfsw2ca15inmk8mu.gif

Интерфейс


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


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

us9rorpkqexbezizpku9gojzb8e.gif

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

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

a4bzswfjdneuds-lv4lefrh_buw.gif

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


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


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

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

6u1uwelp0dd5oryoothbsvlvmak.png

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


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

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

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

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


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

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

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

trs4mid2swb-s-pb04r8u0ccvww.gif

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


Новый Commit


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

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

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

bexbinotbjagaqeqnywbjxj3pcy.png

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


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

cdbltic6rtggabwz6jrs7agub2i.png

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


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

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

nwgdzqg5susfoqu6psczfxem04g.gif

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


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

Веб


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

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

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

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

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

© Habrahabr.ru