- PVSM.RU - https://www.pvsm.ru -
Привет! Рады представить первый мажорный релиз PhpStorm в этом году!
Под катом подробный разбор всех заметных изменений и новых возможностей. Осторожно — много картинок.
Скачать PhpStorm 2020.1 можно на сайте [2] или с помощью Toolbox App [3]. Там же 30-дневная пробная версия. Все продукты JetBrains доступны бесплатно для студентов [4] и разработчиков [5] опенсорсных проектов.
Все действия по работе с зависимостями теперь доступны непосредственно в файле composer.json
и работают прямо в редакторе.
Создать новый файл composer.json можно из контекстного меню или горячей клавишей Ctrl(⌘)+N
. Шаблон этого файла находится в настройках Preferences/Settings | Editor | File and Code Templates.
Управление зависимостями
Чтобы добавить зависимость, достаточно просто начать писать имя вендора и пакета, и появится список автодополнения с подходящими вариантами.
В поле версии будут предложены доступные версии этого пакета. Пока карет (^) или другой символ для указания диапазона версий придется добавлять вручную, но в следующих выпусках мы это исправим.
Для требований по версии PHP или наличия расширений автодополнение тоже будет работать.
Обновление и установка пакетов
Если файла composer.lock
еще нет и пакеты не установлены, то PhpStorm будет подсвечивать название секции require
и require-dev
. Чтобы установить их, можно нажать кнопку Install в тулбаре над редактором. Или воспользоваться быстрым действием по нажатию Alt(⌥)+Enter
и выбрать Install packages.
А вот если установлены не все пакеты, то PhpStorm подсветит недостающие. Тогда Alt(⌥)+Enter
можно вызвать на любом из них и выбрать Update package или Update all packages.
Рядом с указанным требованием по версии серым будет написана версия пакета, которая реально установлена. А во всплывающем диалоге для пакетов будет информация с packagist.org о числе скачиваний и звездочек.
Всю информацию о пакетах и их версиях PhpStorm берет с packagist.org и кеширует.
Навигация к файлам и папкам
Наверняка вы знаете, что по нажатию Ctrl(⌘)+Click
и Ctrl(⌘)+B
можно переходить к определению сущностей или искать их использования.
В composer.json
это тоже будет работать. Если нажать Ctrl(⌘)+Click
на пакете, то соответствующая директория будет подсвечена в Project Tree. А если на файле, то он будет открыт в редакторе.
Нажатие Ctrl(⌘)+Click
или Ctrl(⌘)+B
на любой ссылке в composer.json
ожидаемо откроет ее в браузере.
Автодополнение в секциях autoload(-dev)
Для неймспейсов и путей работает автодополнение на основе информации из классов и структуры директорий проекта.
Ctrl(⌘)+Click
и Ctrl(⌘)+B
для перехода к файлам и папкам здесь тоже работает.
Улучшения для скриптов
Во-первых, таким же образом работают переходы к файлам/папкам/методам. Во-вторых, поддерживаются алиасы для команд. И, в-третьих, скрипты можно запускать из редактора нажатием кнопки [play] напротив имени скрипта.
При этом автоматически создается Run-конфигурация. Это значит, что повторно запускать скрипт можно горячей клавишей Ctrl(⌃)+R
, что довольно удобно при отладке:
Установка инструментов качества кода
Если в dev-зависимостях есть FriendsOfPHP/PHP-CS-Fixer
, то PhpStorm проверит, включена ли соответствующая инспекция и установлен ли набор правил. Если нет, можно будет вызвать Alt(⌥)+Enter
, чтобы всё исправить:
Движок вывода типов — это основа PhpStorm, и в этой версии в нем было сделано несколько заметных изменений.
Подсветка лишних тегов var [6]
Добавлять теги @var
— хороший способ подсказать PhpStorm тип переменной. Но мы постоянно улучшаем вывод типов, и некоторые такие объявления вполне могут оказаться избыточными, т. к. PhpStorm уже знает тип переменной.
Такие случаи будут подсвечены, и их можно удалить с помощью квик-фикса Alt(⌥)+Enter
-> “Remove var [6]”:
Отслеживание null-типов — сложная задача, и были места, где PhpStorm не справлялся. Теперь в 2020.1 PhpStorm знает, когда переменная может быть null, а когда нет.
Вот примеры:
Автодополнение для инициализированного массива
Допустим, у вас есть массив с известными элементами, и позже вы пытаетесь итерироваться по нему. Раньше здесь не работало автодополнение, так как информация о типе терялась В 2020.1 всё работает:
Автодополнение в array_map/array_filter
В теле замыкания, которое передано в функции array_map() и array_filter(), теперь работает дополнение для аргументов.
Строить покрытие кода можно с помощью Xdebug [7]. Но поскольку это прежде всего отладчик, то у него есть приличные накладные расходы. Чтобы ускорить получение отчета о покрытии, можно использовать более легковесные инструменты: расширение krakjoe/pcov [8] или встроенный в PHP 5.6+ PHPDBG.
Оба теперь поддерживаются в PhpStorm. Нужно создать Run-конфигурацию для тестов и в настройках выбрать желаемый драйвер покрытия. Затем запустить тесты с подсчетом покрытия нажав кнопку :
Подробнее о различиях в подсчете покрытия между Xdebug, PCOV, and phpdbg можно прочитать в README [9].
В недавно вышедшем PHPUnit 9 (и уже 9.1) много возможностей было удалено или объявлено устаревшими. Чтобы ускорить миграцию и предотвратить ошибки, мы добавили пачку инспекций и квик-фиксов.
Создать новый тест для класса
Вызвав Alt(⌥)+Enter
на объявлении класса и выбрав Create New PHP Test можно быстро получить скелет для теста.
Метаданные в файле .phpstorm.meta.php
позволяют предоставить PhpStorm дополнительные сведения о вашем проекте и тем самым улучшить автодополнение кода. Например, эта возможность используется в плагине Symfony [10] и в Laravel IDE Helper [11].
Больше о возможностях метаданных можно узнать из доклада PHP как инструмент разработки PhpStorm [12] на PHP Russia 2019.
В PhpStorm 2020.1 добавлен ряд улучшений для метаданных.
Индекс параметра в директивах override, map, и type
Раньше с помощью override()
, map()
, и type()
можно было изменить поведение первого аргумента функций. В PhpStorm 2020.1 можно указать произвольный индекс параметра:
Доступ к свойствам через __get
Если вы получали значения свойств через магический __get()
, то информация о типе терялась. Можно было использовать дополнительные теги @var
или @property
, но не всегда это спасало. Теперь можно указать всё через метаданные.
Автодополнение ключей в объектах, реализующих ArrayAccess
Метаданные поддерживали объекты ArrayAccess, но подсказывали только тип значений. Теперь возможные ключи тоже автодополняются.
Кастомные точки выхода
PhpStorm рассматривает функции типа die()
и exit()
или бросание исключений как завершающие выполнение. Но в приложениях могут быть более сложные точки выхода. Например, простая dd()
или функция trigger_error [13] с аргументом E_USER_ERROR [14].
В PhpStorm 2020.1 можно помечать функции как точки выхода, и это соответствующим образом скорректирует анализ потока выполнения.
Иконки для функций, переопределенных через метаданные
Напротив объявлений функций, чье поведение было изменено с помощью override()
, exitPoint()
или expectArguments()
, будет отображаться иконка. Нажатие иконки откроет файл .phpstorm.meta.php
, в котором и меняется поведение, т. к. файлов может быть несколько.
Иконки можно спрятать в 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, то тогда в списке автодополнения будет показано, как именно изменился порядок элементов.
Мы планируем предотвратить восстание машин продолжить работу в этом направлении в следующих версиях.
Приватное свойство может быть локальной переменной
Определение свойства будет подсвечено, если оно используется только в одном методе и сразу же в нем перезаписывается. Чтобы исправить, можно вызвать квик-фикс Alt(⌥)+Enter
“Replace property with local variable”.
Лишняя инициализация свойства
Допустим, в классе у приватного свойства есть значение по умолчанию, но в конструкторе оно сразу же перезаписывается другим значением. В этом случае значение по умолчанию является избыточным и добавляет только шум.
Неиспользуемый инициализатор будет подсвечен, и его можно удалить квик-фиксом Alt(⌥)+Enter
“Remove redundant initializer”.
Изменить тип свойства в PHP 7.4 в соответствии со значением по умолчанию
Избыточный тернарный оператор
PhpStorm подсветит тривиальные тернарные выражения и с помощью квик-фикса Alt(⌥)+Enter
их можно заменить на более простые:
Избыточная передача по ссылке
Использование передачи по ссылке может привести к неожиданным последствиям, и это одна из причин, по которой Никита Попов предложил разрешить явную передачу по ссылке при вызове функций [15] в PHP.
Ну а пока, PhpStorm 2020.1 подсветит параметры объявленные как передаваемые по ссылке, но при этом не используемые в качестве таковых. Их можно безопасно удалить квик-фиксом Alt(⌥)+Enter
.
То же самое будет работать и для массивов со ссылкой в foreach-цикле:
Удалить лишний PHPDoc, в котором только объявление типов теперь тоже довольно просто благодаря соответствующему квик-фиксу.
Правда, по умолчанию инспекция стоит на уровне Info, то есть подсвечивать не будет. Если вы хотите, чтобы лишние блоки PHPDoc подсвечивались, то для инспекции Redundant PHPDoc comment в Preferences | Editor | Inspections установите уровень Weak Warning или выше.
Иногда может быть необходимо перенести метод в другой класс. Если этот метод используется много раз в коде проекта, то PhpStorm может тут помочь.
Раньше сначала нужно было сделать метод статическим, а потом уже вызвать еще одно действие, чтобы перенести его. В PhpStorm 2020.1 рефакторинг “Move method” переработан в одно атомарное действие. Убрали лишние шаги и попапы, и всё делается за один раз.
Наведите курсор на метод и нажмите F6
(или Ctrl+T
, 3
). Затем выберите целевой класс и всё готово.
Чтобы посмотреть все доступные рефакторинги [16], можно нажать
Ctrl+T
в любом месте кода.
Теперь, чтобы выборочно включать отладку, не нужно возиться с параметрами запроса или ставить расширение в браузере. Достаточно создать HTTP-запрос в файле .http
и отправить его командой PHP Debug, которая доступна в меню Alt(⌥)+Enter
или по нажатию иконки. В результате к запросу будет автоматически добавлена кука XDEBUG_SESSION
.
@deprecated-элементы отображаются как зачеркнутые в Structure tree view
Ctrl(⌘)+F12
Подсветка совпадающих тегов <?php / ?>
Прыжок к открывающей/закрывающей скобке
Shift+Ctrl+M (⌃+M)
Кастомизация Lexer для Twig
Иногда может понадобиться изменить символы тегов для шаблонов Twig, например если используется еще и Angular, у которого такой же синтаксис.
Сделать это можно в настройках Preferences/Settings | Languages & Frameworks | PHP | Twig.
В PhpStorm из коробки включен плагин Grazie, которые проверяет текст не только на орфографические ошибки, но также на грамматику и стиль. Причем поддерживаются 16 языков, и все проверки выполняются локально без отправки ваших данных куда-либо.
По умолчанию проверки включены для Markdown-файлов.
Можно включить их также для всех строковых литералов, комментариев, блоков PHPDoc и сообщений коммитов.
Для PHP включить можно в Settings/Preferences|Editor | Proofread | Grammar.
Иногда бывает нужно быстро посмотреть/поправить файл и открывать для этого целую IDE кажется слишком, но привычную подсветку и функции иметь хочется. Именно для таких случаев мы работаем над легковесным режимом LightEdit.
Работает это так: если вы открываете файл из командной строки или контекстного меню операционной системы, при этом PhpStorm не запущен, то файл откроется в LightEdit. Ну а если полноценный PhpStorm уже работает, то файл просто откроется в нем.
Новый режим сочетает в себе Distraction Free и Fullscreen для глубокого погружения в код.
View | Appearance | Enter Zen Mode
Вместо открытия новых вкладок и переключения между ними, теперь можно разделить экран и открыть несколько сессий в одной вкладке. Для этого из контекстного меню терминала выбрать Split Horizontally / Vertically.
Тема IntelliJ Light
Светлая тема немного обновлена и унифицирована, чтобы выглядеть одинаково на всех ОС, а ее название сменилось на IntelliJ Light.
Кастомизация статусбара
Из контекстного меню можно выбрать, какая информация будет на нем отображаться.
Раньше, если SSH-подключение переиспользовалось в деплойменте, Remote-интерпретаторе или SSH-терминале, его каждый раз приходилось конфигурировать заново.
Теперь все SSH-подключения можно добавлять/редактировать в разделе настроек Preferences/Settings | Tools | SSH Configuration, а затем использовать их многократно там, где они нужны.
Например, на macOS:
- ~/Library/Preferences/PhpStorm2019.3
+ ~/Library/Application Support/JetBrains/PhpStorm2020.1
Подробнее в хелпе [18].
Раньше Run-конфигурации хранились в папке .idea
, которую многие полностью добавляют в .gitignore (лучше вот так [19]). Теперь можно выбрать любой путь и расшарить Run-конфигурацию с коллегами через систему контроля версий.
Может быть особенно удобно при онбординге новых сотрудников: стянул проект, открыл в PhpStorm, запустил одной кнопкой.
Чтобы сделать это, в диалоге Run/Debug-конфигурации нужно отметить опцию Store as project file, а по нажатии шестеренки можно выбрать желаемый путь в проекте.
Окно Commit доступно в немодальном режиме и отображается слева. Таким образом оно не блокирует работу над другими файлами во время подготовки коммита, а на экране помещается больше информации об изменениях.
Новый Commit включен по умолчанию для новых пользователей и выключен для тех, у кого уже был установлен PhpStorm.
Включается опцией Use non-modal commit interface в Preferences / Settings | Version Control | Commit.
В нижнем правом углу окна IDE указана текущая ветка Git. Если нажать на нее, то откроется окно VCS | Git | Branches.
Здесь добавили поле для поиска. Кнопка Refresh обновляет список remote-веток. И для каждого коммита добавлен индикатор: входящий (синий) или исходящий (зеленый).
Git Rebase позволяет переписать историю коммитов. Теперь можно быстро избавиться от «временных» коммитов, поправить сообщение или порядок коммитов. Конечно, всё это можно сделать и из консоли вручную, но PhpStorm позволяет тут же смотреть, что было изменено в том или ином коммите.
Чтобы начать, в истории коммитов нужно выбрать желаемый базовый коммит и из контекстного меню выбрать Interactively rebase from here.
PhpStorm включает в себя почти все возможности DataGrip [20] «из коробки», так что можно посмотреть обзор релиза DataGrip 2020.1 [21] от наших коллег.
И, как всегда, все обновления из WebStorm 2020.1 [22] тоже входят в PhpStorm.
Полный список изменений можно найти в очень больших release notes [23].
Обзор релиза можно также посмотреть на странице “What’s new [2]” и если у вас всего несколько минут, то вот короткий ролик (на английском) с демонстрацией главных фич релиза:
А на этом всё на этот раз. Спасибо, что дочитали до конца! Будем рады вопросам, пожеланиям, баг-репортам и просто мыслям в комментариях.
Берегите себя!
Ваша команда JetBrains PhpStorm
Автор: Роман Пронский
Источник [24]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/metadanny-e/352180
Ссылки в тексте:
[1] Image: https://habr.com/ru/company/JetBrains/blog/497358/
[2] сайте: https://www.jetbrains.com/ru-ru/phpstorm/whatsnew/
[3] Toolbox App: https://www.jetbrains.com/ru-ru/toolbox-app/
[4] студентов: https://www.jetbrains.com/ru-ru/student/
[5] разработчиков: https://www.jetbrains.com/ru-ru/community/opensource/?product=phpstorm
[6] var: https://habr.com/ru/users/var/
[7] Xdebug: https://xdebug.org/
[8] krakjoe/pcov: https://github.com/krakjoe/pcov
[9] в README: https://github.com/krakjoe/pcov#differences-in-reporting
[10] плагине Symfony: https://github.com/King2500/symfony-phpstorm-meta
[11] Laravel IDE Helper: https://github.com/barryvdh/laravel-ide-helper#phpstorm-meta-for-container-instances
[12] PHP как инструмент разработки PhpStorm: https://www.youtube.com/watch?v=px7y0iRdNUY
[13] trigger_error: https://www.php.net/manual/ru/function.trigger-error.php
[14] E_USER_ERROR: https://www.php.net/manual/en/errorfunc.constants.php#errorfunc.constants.errorlevels.e-user-error
[15] явную передачу по ссылке при вызове функций: https://wiki.php.net/rfc/explicit_send_by_ref
[16] доступные рефакторинги: https://www.jetbrains.com/help/phpstorm/refactoring-source-code.html
[17] JetBrains Mono: https://www.jetbrains.com/lp/mono/
[18] хелпе: https://www.jetbrains.com/help/phpstorm/2020.1/tuning-the-ide.html#default-dirs
[19] вот так: https://github.com/github/gitignore/blob/master/Global/JetBrains.gitignore
[20] DataGrip: https://www.jetbrains.com/datagrip/
[21] обзор релиза DataGrip 2020.1: https://habr.com/ru/company/JetBrains/blog/495474/
[22] все обновления из WebStorm 2020.1: https://habr.com/ru/company/JetBrains/blog/495228/
[23] release notes: https://confluence.jetbrains.com/display/PhpStorm/PhpStorm+2019.2+Release+Notes
[24] Источник: https://habr.com/ru/post/497358/?utm_source=habrahabr&utm_medium=rss&utm_campaign=497358
Нажмите здесь для печати.