![](https://habrastorage.org/webt/-6/yq/oj/-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.![](https://habrastorage.org/webt/7q/_c/ty/7q_ctyb0ra98t0nvyhku-4lt3jm.gif)
Управление зависимостями
Чтобы добавить зависимость, достаточно просто начать писать имя вендора и пакета, и появится список автодополнения с подходящими вариантами.
![](https://habrastorage.org/webt/kc/h8/iq/kch8iqtma5aezynhcnigvgx5hqu.gif)
В поле версии будут предложены доступные версии этого пакета. Пока карет (^) или другой символ для указания диапазона версий придется добавлять вручную, но в следующих выпусках мы это исправим.
Для требований по версии PHP или наличия расширений автодополнение тоже будет работать.
Обновление и установка пакетов
Если файла
composer.lock
еще нет и пакеты не установлены, то PhpStorm будет подсвечивать название секции require
и require-dev
. Чтобы установить их, можно нажать кнопку Install в тулбаре над редактором. Или воспользоваться быстрым действием по нажатию Alt(⌥)+Enter
и выбрать Install packages.
![](https://habrastorage.org/webt/y0/op/lx/y0oplxbtehhsjn7u7c5wykle_c0.gif)
А вот если установлены не все пакеты, то PhpStorm подсветит недостающие. Тогда
Alt(⌥)+Enter
можно вызвать на любом из них и выбрать Update package или Update all packages.Рядом с указанным требованием по версии серым будет написана версия пакета, которая реально установлена. А во всплывающем диалоге для пакетов будет информация с packagist.org о числе скачиваний и звездочек.
![](https://habrastorage.org/webt/n7/nd/83/n7nd83q0v4yjyiqwacfvw6ex-n8.gif)
Всю информацию о пакетах и их версиях PhpStorm берет с packagist.org и кеширует.
Навигация к файлам и папкам
Наверняка вы знаете, что по нажатию
Ctrl(⌘)+Click
и Ctrl(⌘)+B
можно переходить к определению сущностей или искать их использования.В
composer.json
это тоже будет работать. Если нажать Ctrl(⌘)+Click
на пакете, то соответствующая директория будет подсвечена в Project Tree. А если на файле, то он будет открыт в редакторе.![](https://habrastorage.org/webt/wd/su/sd/wdsusd9z__iwda_zslbel8yuskm.gif)
Нажатие
Ctrl(⌘)+Click
или Ctrl(⌘)+B
на любой ссылке в composer.json
ожидаемо откроет ее в браузере.Автодополнение в секциях autoload(-dev)
Для неймспейсов и путей работает автодополнение на основе информации из классов и структуры директорий проекта.
![](https://habrastorage.org/webt/ry/cl/_f/rycl_fkxjhtuhgizzifd_ljpppi.gif)
Ctrl(⌘)+Click
и Ctrl(⌘)+B
для перехода к файлам и папкам здесь тоже работает.Улучшения для скриптов
Во-первых, таким же образом работают переходы к файлам/папкам/методам. Во-вторых, поддерживаются алиасы для команд. И, в-третьих, скрипты можно запускать из редактора нажатием кнопки [play] напротив имени скрипта.
При этом автоматически создается Run-конфигурация. Это значит, что повторно запускать скрипт можно горячей клавишей
Ctrl(⌃)+R
, что довольно удобно при отладке:![](https://habrastorage.org/webt/2u/-p/qc/2u-pqc-0hanaau6akpnhxs8s3rm.gif)
Установка инструментов качества кода
Если в dev-зависимостях есть
FriendsOfPHP/PHP-CS-Fixer
, то PhpStorm проверит, включена ли соответствующая инспекция и установлен ли набор правил. Если нет, можно будет вызвать Alt(⌥)+Enter
, чтобы всё исправить:![](https://habrastorage.org/webt/ru/1y/fc/ru1yfcix_59hronlqdj5ycurbiy.png)
Улучшения вывода типов PHP
Движок вывода типов — это основа PhpStorm, и в этой версии в нем было сделано несколько заметных изменений.
Подсветка лишних тегов var
Добавлять теги
@var
— хороший способ подсказать PhpStorm тип переменной. Но мы постоянно улучшаем вывод типов, и некоторые такие объявления вполне могут оказаться избыточными, т. к. PhpStorm уже знает тип переменной.Такие случаи будут подсвечены, и их можно удалить с помощью квик-фикса
Alt(⌥)+Enter
-> “Remove var”:![](https://habrastorage.org/webt/qq/ek/iu/qqekiu6d5hlyvnqikdyf5hthri4.gif)
Отслеживание null-типов — сложная задача, и были места, где PhpStorm не справлялся. Теперь в 2020.1 PhpStorm знает, когда переменная может быть null, а когда нет.
Вот примеры:
![](https://habrastorage.org/webt/kv/lx/9c/kvlx9ctew_hokdyubmu7afdmnys.gif)
Автодополнение для инициализированного массива
Допустим, у вас есть массив с известными элементами, и позже вы пытаетесь итерироваться по нему. Раньше здесь не работало автодополнение, так как информация о типе терялась В 2020.1 всё работает:
![](https://habrastorage.org/webt/0s/me/jh/0smejhrs4-9qp5qwcauscd6f1fg.gif)
Автодополнение в array_map/array_filter
В теле замыкания, которое передано в функции array_map() и array_filter(), теперь работает дополнение для аргументов.
![](https://habrastorage.org/webt/o7/di/xp/o7dixplyvyjqo9x2eojhv3aonkq.png)
Покрытие кода с помощью PCOV и PHPDBG
Строить покрытие кода можно с помощью Xdebug. Но поскольку это прежде всего отладчик, то у него есть приличные накладные расходы. Чтобы ускорить получение отчета о покрытии, можно использовать более легковесные инструменты: расширение krakjoe/pcov или встроенный в PHP 5.6+ PHPDBG.
Оба теперь поддерживаются в PhpStorm. Нужно создать Run-конфигурацию для тестов и в настройках выбрать желаемый драйвер покрытия. Затем запустить тесты с подсчетом покрытия нажав кнопку
![](https://habrastorage.org/webt/9o/gn/g6/9ogng6xtagzdx6hqdmguuztmnie.png)
![](https://habrastorage.org/webt/hq/lc/h1/hqlch1kgdb4llrt7x6umviiv3hu.gif)
Подробнее о различиях в подсчете покрытия между Xdebug, PCOV, and phpdbg можно прочитать в README.
Инструментарий PHPUnit
В недавно вышедшем PHPUnit 9 (и уже 9.1) много возможностей было удалено или объявлено устаревшими. Чтобы ускорить миграцию и предотвратить ошибки, мы добавили пачку инспекций и квик-фиксов.
![](https://habrastorage.org/webt/wa/2p/im/wa2pimcwjefg58zfowlajsdj6ji.gif)
Создать новый тест для класса
Вызвав
Alt(⌥)+Enter
на объявлении класса и выбрав Create New PHP Test можно быстро получить скелет для теста.![](https://habrastorage.org/webt/cz/ms/mb/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 можно указать произвольный индекс параметра:![](https://habrastorage.org/webt/he/ml/0p/heml0pmcpsd8k_ff2ma1tuofo3a.png)
Доступ к свойствам через __get
Если вы получали значения свойств через магический
__get()
, то информация о типе терялась. Можно было использовать дополнительные теги @var
или @property
, но не всегда это спасало. Теперь можно указать всё через метаданные.![](https://habrastorage.org/webt/uf/yl/n7/ufyln7r7_1-rcfz5knwwfewbxww.png)
Автодополнение ключей в объектах, реализующих ArrayAccess
Метаданные поддерживали объекты ArrayAccess, но подсказывали только тип значений. Теперь возможные ключи тоже автодополняются.
![](https://habrastorage.org/webt/wp/lw/rm/wplwrm0risc1lsc6bzduo6pa9do.png)
Кастомные точки выхода
PhpStorm рассматривает функции типа
die()
и exit()
или бросание исключений как завершающие выполнение. Но в приложениях могут быть более сложные точки выхода. Например, простая dd()
или функция trigger_error с аргументом E_USER_ERROR.В PhpStorm 2020.1 можно помечать функции как точки выхода, и это соответствующим образом скорректирует анализ потока выполнения.
![](https://habrastorage.org/webt/ev/as/m3/evasm34g6nk9kry9ulynxbdei-q.png)
Иконки для функций, переопределенных через метаданные
Напротив объявлений функций, чье поведение было изменено с помощью
override()
, exitPoint()
или expectArguments()
, будет отображаться иконка. Нажатие иконки откроет файл .phpstorm.meta.php
, в котором и меняется поведение, т. к. файлов может быть несколько.![](https://habrastorage.org/webt/uy/rt/hk/uyrthkjrt_wqayncckw11os_24a.png)
Иконки можно спрятать в Preferences/Settings | Editor | General | Gutter Icons.
Машинное обучение для сортировки списка дополнений
Добавили ранжирование вариантов автодополнения на основе машинного обучения.
Как увидеть ML в действии?
По умолчанию автодополнение с ML отключено.
Если еще включить опцию Show position changes in completion popup, то тогда в списке автодополнения будет показано, как именно изменился порядок элементов.
![](https://habrastorage.org/webt/he/qr/0_/heqr0_ljxl7lk7fb4jg922w1s-w.gif)
Мы планируем
Новые инспекции
Приватное свойство может быть локальной переменной
Определение свойства будет подсвечено, если оно используется только в одном методе и сразу же в нем перезаписывается. Чтобы исправить, можно вызвать квик-фикс
Alt(⌥)+Enter
“Replace property with local variable”.![](https://habrastorage.org/webt/_0/5h/xa/_05hxaroz8mhhyqcvncdghtmpyi.png)
Лишняя инициализация свойства
Допустим, в классе у приватного свойства есть значение по умолчанию, но в конструкторе оно сразу же перезаписывается другим значением. В этом случае значение по умолчанию является избыточным и добавляет только шум.
Неиспользуемый инициализатор будет подсвечен, и его можно удалить квик-фиксом
Alt(⌥)+Enter
“Remove redundant initializer”.![](https://habrastorage.org/webt/aw/jv/kr/awjvkrbihpqraimlogmnsn5l-pw.png)
Изменить тип свойства в PHP 7.4 в соответствии со значением по умолчанию
![](https://habrastorage.org/webt/hx/dw/s-/hxdws-t5yt_0zaoi2gn8ilsz5jc.gif)
Избыточный тернарный оператор
PhpStorm подсветит тривиальные тернарные выражения и с помощью квик-фикса
Alt(⌥)+Enter
их можно заменить на более простые:![](https://habrastorage.org/webt/ql/48/hp/ql48hpml8rhv3t_hu9ggivldosm.png)
Избыточная передача по ссылке
Использование передачи по ссылке может привести к неожиданным последствиям, и это одна из причин, по которой Никита Попов предложил разрешить явную передачу по ссылке при вызове функций в PHP.
Ну а пока, PhpStorm 2020.1 подсветит параметры объявленные как передаваемые по ссылке, но при этом не используемые в качестве таковых. Их можно безопасно удалить квик-фиксом
Alt(⌥)+Enter
.![](https://habrastorage.org/webt/r5/w7/gp/r5w7gpqie_myyrplga_6ilwvsz0.png)
То же самое будет работать и для массивов со ссылкой в foreach-цикле:
![](https://habrastorage.org/webt/w7/li/rb/w7lirbtspctri0ipatzh_kriguo.png)
Удалить лишний PHPDoc, в котором только объявление типов теперь тоже довольно просто благодаря соответствующему квик-фиксу.
![](https://habrastorage.org/webt/qn/e-/ff/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
). Затем выберите целевой класс и всё готово.![](https://habrastorage.org/webt/mf/a1/l0/mfa1l0kssopieiuuvbm8vlgmwza.gif)
Чтобы посмотреть все доступные рефакторинги, можно нажать Ctrl+T
в любом месте кода.
PHP Debug in HTTP Client
Теперь, чтобы выборочно включать отладку, не нужно возиться с параметрами запроса или ставить расширение в браузере. Достаточно создать HTTP-запрос в файле
.http
и отправить его командой PHP Debug, которая доступна в меню Alt(⌥)+Enter
или по нажатию иконки. В результате к запросу будет автоматически добавлена кука XDEBUG_SESSION
.![](https://habrastorage.org/webt/cr/vm/uc/crvmuclv0hq2ilclxd0mzjdejps.gif)
И еще несколько мелочей для PHP
@deprecated-элементы отображаются как
Ctrl(⌘)+F12
![](https://habrastorage.org/webt/qp/q9/ix/qpq9ixjs4bhxyzbx5ekcirjgfpk.png)
Подсветка совпадающих тегов <?php / ?>
![](https://habrastorage.org/webt/u5/mn/h2/u5mnh2_yi5azlnfr4ktr9xzudwa.gif)
Прыжок к открывающей/закрывающей скобке
Shift+Ctrl+M (⌃+M)
![](https://habrastorage.org/webt/tb/d-/jd/tbd-jdz7u0e2jmpzseanbv6w0h0.gif)
Кастомизация Lexer для Twig
Иногда может понадобиться изменить символы тегов для шаблонов Twig, например если используется еще и Angular, у которого такой же синтаксис.
Сделать это можно в настройках Preferences/Settings | Languages & Frameworks | PHP | Twig.
IDE
Продвинутый корректор правописания и грамматики Grazie
В PhpStorm из коробки включен плагин Grazie, которые проверяет текст не только на орфографические ошибки, но также на грамматику и стиль. Причем поддерживаются 16 языков, и все проверки выполняются локально без отправки ваших данных куда-либо.
![](https://habrastorage.org/webt/ru/bi/kn/rubiknxvc-hlfhf8jcvzwr0vsra.gif)
По умолчанию проверки включены для Markdown-файлов.
Можно включить их также для всех строковых литералов, комментариев, блоков PHPDoc и сообщений коммитов.
Для PHP включить можно в Settings/Preferences|Editor | Proofread | Grammar.
Режим LightEdit
Иногда бывает нужно быстро посмотреть/поправить файл и открывать для этого целую IDE кажется слишком, но привычную подсветку и функции иметь хочется. Именно для таких случаев мы работаем над легковесным режимом LightEdit.
Работает это так: если вы открываете файл из командной строки или контекстного меню операционной системы, при этом PhpStorm не запущен, то файл откроется в LightEdit. Ну а если полноценный PhpStorm уже работает, то файл просто откроется в нем.
![](https://habrastorage.org/webt/mh/8p/z-/mh8pz-pufxjuut1csg9pl-uqxwe.gif)
JetBrains Mono — шрифт по умолчанию
![](https://habrastorage.org/webt/_h/ir/rt/_hirrtrysc0vfilgohr4_de2nvq.png)
Режим Zen
Новый режим сочетает в себе Distraction Free и Fullscreen для глубокого погружения в код.
View | Appearance | Enter Zen Mode
![](https://habrastorage.org/webt/k0/nq/vi/k0nqvidoxevcfsw2ca15inmk8mu.gif)
Интерфейс
Разделение окна терминала
Вместо открытия новых вкладок и переключения между ними, теперь можно разделить экран и открыть несколько сессий в одной вкладке. Для этого из контекстного меню терминала выбрать Split Horizontally / Vertically.
![](https://habrastorage.org/webt/us/9r/or/us9rorpkqexbezizpku9gojzb8e.gif)
Тема IntelliJ Light
Светлая тема немного обновлена и унифицирована, чтобы выглядеть одинаково на всех ОС, а ее название сменилось на IntelliJ Light.
Кастомизация статусбара
Из контекстного меню можно выбрать, какая информация будет на нем отображаться.
![](https://habrastorage.org/webt/a4/bz/sw/a4bzswfjdneuds-lv4lefrh_buw.gif)
Конфигурация
Унифицированная конфигурация SSH
Раньше, если SSH-подключение переиспользовалось в деплойменте, Remote-интерпретаторе или SSH-терминале, его каждый раз приходилось конфигурировать заново.
Теперь все SSH-подключения можно добавлять/редактировать в разделе настроек Preferences/Settings | Tools | SSH Configuration, а затем использовать их многократно там, где они нужны.
![](https://habrastorage.org/webt/6u/1u/we/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, а по нажатии шестеренки можно выбрать желаемый путь в проекте.
![](https://habrastorage.org/webt/tr/s4/mi/trs4mid2swb-s-pb04r8u0ccvww.gif)
Контроль версий
Новый Commit
Окно Commit доступно в немодальном режиме и отображается слева. Таким образом оно не блокирует работу над другими файлами во время подготовки коммита, а на экране помещается больше информации об изменениях.
Новый Commit включен по умолчанию для новых пользователей и выключен для тех, у кого уже был установлен PhpStorm.
Включается опцией Use non-modal commit interface в Preferences / Settings | Version Control | Commit.
![](https://habrastorage.org/webt/be/xb/in/bexbinotbjagaqeqnywbjxj3pcy.png)
Улучшения для работы с ветками Git
В нижнем правом углу окна IDE указана текущая ветка Git. Если нажать на нее, то откроется окно VCS | Git | Branches.
Здесь добавили поле для поиска. Кнопка Refresh обновляет список remote-веток. И для каждого коммита добавлен индикатор: входящий (синий) или исходящий (зеленый).
![](https://habrastorage.org/webt/cd/bl/ti/cdbltic6rtggabwz6jrs7agub2i.png)
Переработан интерактивный Rebase
Git Rebase позволяет переписать историю коммитов. Теперь можно быстро избавиться от «временных» коммитов, поправить сообщение или порядок коммитов. Конечно, всё это можно сделать и из консоли вручную, но PhpStorm позволяет тут же смотреть, что было изменено в том или ином коммите.
Чтобы начать, в истории коммитов нужно выбрать желаемый базовый коммит и из контекстного меню выбрать Interactively rebase from here.
![](https://habrastorage.org/webt/nw/gd/zq/nwgdzqg5susfoqu6psczfxem04g.gif)
Инструменты БД
PhpStorm включает в себя почти все возможности DataGrip «из коробки», так что можно посмотреть обзор релиза DataGrip 2020.1 от наших коллег.
Веб
И, как всегда, все обновления из WebStorm 2020.1 тоже входят в PhpStorm.
Полный список изменений можно найти в очень больших release notes.
Обзор релиза можно также посмотреть на странице “What’s new” и если у вас всего несколько минут, то вот короткий ролик (на английском) с демонстрацией главных фич релиза:
А на этом всё на этот раз. Спасибо, что дочитали до конца! Будем рады вопросам, пожеланиям, баг-репортам и просто мыслям в комментариях.
Берегите себя!
Ваша команда JetBrains PhpStorm