Хабрахабр

PhpStorm 2019.2: Типизированные свойства PHP 7.4, поиск дубликатов, EditorConfig, Shell-скрипты и многое другое

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

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

Как всегда, доступна 30-дневная пробная версия. Скачать новую версию можно на сайте или с помощью Toolbox App. Полную же версию могут использовать обладатели действующей подписки на PhpStorm или All Products pack, а также бесплатно студенты и разработчики проектов с открытым исходным кодом.

PHP 7.4: типизированные свойства

4 обещает быть самым крутым и богатым на новые возможности релизом со времен PHP 7. PHP 7. Посмотрите на все принятые в нем RFC. 0!

2 уже полностью их поддерживает! Самая ожидаемая фича это, конечно же, типизированные свойства, и PhpStorm 2019. Включая подсветку, вывод и резолв типов, а также всевозможные проверки.

Если вы попытаетесь положить в свойство что-то не то — PhpStorm сразу об этом предупредит.

4, который выйдет в конце ноября, в PhpStorm есть быстрые фиксы. А вот чтобы подготовиться к миграции на PHP 7. Для объявления типа можно нажать Alt+Enter на свойстве без типа и выбрать Add declared type for the field. PhpStorm определит тип свойства на основе информации в PHPDoc, дефолтном значении или декларации типа аргумента, если свойство внедряется через конструктор.

Оператор ??= (null coalesce assign)

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

В PhpStorm, само собой, поддерживается синтаксис, но еще есть быстрый фикс Alt+Enter для того, чтобы заменить ?? там, где это возможно:

Оператор распаковки (...) в массивах

6. PHP поддерживает распаковку аргументов с помощью оператора еще с версии 5. В предстоящем релизе PHP оператор можно будет использовать и в массивах:

PhpStorm проанализирует использование оператора на корректность и удостоверится, что вы распаковываете только массивы или объекты Traversable и не пытаетесь по ошибке сделать что-то не поддерживаемое интерпретатором PHP:

3 мы планируем реализовать полную поддержку и быстрые фиксы для всех новых возможностей PHP 7. В следующем релизе PhpStorm 2019. 4, включая стрелочные функции, разделители в числовых литералах и др.

Автовнедрение регулярных выражений в PHP

Конечно, можно было внедрить язык RegExp вручную, но не будешь же делать это по всему проекту. В предыдущих версиях PhpStorm регулярные выражения в PHP-коде по умолчанию никак не подсвечивались и отображались как обычные строки.

2 добавлена полная поддержка регулярок в PHP! В PhpStorm 2019. Это значит, что там, где в коде используются функции preg_*, шаблоны будут подсвечиваться и проверяться на валидность.

Наведите указатель на шаблон, нажмите Alt+Enter и вызовите Check RegExp. Более того, теперь можно протестировать регулярное выражение прямо в IDE!

Подсветка дублированного кода на лету

Если вы пока его не пробовали, попробуйте — и удивитесь, как много повторений может быть в проекте! Поиск дубликатов в PhpStorm есть уже довольно давно, в меню Code → Locate Duplicates.

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

Вы сможете перейти к другому дубликату или просмотреть все списком в отдельном окне:

Кстати, это хорошие кандидаты на рефакторинг Extract.

Порог чувствительности можно установить в разделе Preferences | Editor | Inspections | General | Duplicated code fragment → PHP. Новая инспекция называется Duplicated code fragment и включена по умолчанию. А в Preferences | Editor | Duplicates можно установить, какие элементы будут игнорироваться при поиске дубликатов, например можно не учитывать разные имена переменных, методов или свойств, а также значений констант.

Поддержка формата PHPT

Лучший способ — начать с документации и тестов! Хотели бы контрибьютить в сам PHP и присоединиться к PHP Internals? Тесты для PHP пишутся в специальных файлах .phpt. К счастью, для этого нет необходимости знать C. По сути, это текстовый файл, разбитый на несколько секций, некоторые из которых могут содержать PHP-код.

2 есть и поддержка phpt-файлов! Так вот, в PhpStorm 2019. Секции подсвечиваются, PHP и INI автоматически внедряются там где нужно, работают переходы на внешние файлы в соответствующих секциях.

Больше информации о написании тестов для PHP есть тут: PHP TestFest Tutorials, PHP Internals Book и qa.php.net.

Запуск Composer через любой PHP-интерпретатор

Проблема в том, что его может не быть вовсе или окружение может не соответствовать продакшену. Ранее для запуска Composer всегда нужен был локальный интерпретатор PHP. 2 запускать Composer можно через любой интерпретатор, сконфигурированный в IDE. Теперь в PhpStorm 2019. Например, через Docker, Docker-compose, Vagrant или, скажем, удаленный сервер по SSH.

Чтобы попробовать эту возможность, выберите Remote Interpreter в настройках Preferences | Languages & Frameworks | PHP | Composer.

Выберите существующий интерпретатор или добавьте новый!

Быстрые фиксы

Разбиваем список на несколько строк и наоборот

Поэтому, если у вас есть большой массив или аргументы/параметры функции не помещаются на экране, то можно нажать на них Alt+Enter и выбрать Split comma-separated values into multiple lines: Согласно PSR-2, строка больше 80 символов в длину должна быть разбита на несколько строк, каждая из которых короче 80 символов.

Если вдруг в результате рефакторинга список стал короче и помещается в одну строку, то обратное действие тоже доступно: Join comma-separated values into a single line.

Чтобы долго не искать нужные опции, выберите этот кусок кода, нажмите Alt+Enter и вызовите Adjust code style settings. Кстати, тут вам может понадобиться быстро поправить настройки стиля кода. PhpStorm при этом предложит поменять только те опции, которые актуальны для выбранных строк:

Конструкция switch

Нажмите Alt+Enter на выражении case без тела и вызовите Copy ‘switch’ branch. Мы реализовали возможность быстро добавлять ветки в конструкции switch.

Не забудьте отредактировать скопированную ветку, иначе PhpStorm будет подсвечивать повторяющийся кусок:

2 предупредит, если в switch нет дефолтной ветки, а добавить ее можно также с помощью быстрого фикса. Также PhpStorm 2019.

Манипулирование строками

Что бы вам ни пришлось делать со строкой — разбить на части, изменить кавычки, конвертировать конкатенацию в sprintf или интерполяцию, или что-либо еще — жмите Alt+Enter на строке и выбирайте нужное действие из списка. PhpStorm поможет с рутинными операциями над строками.

В этом релизе мы добавили пару новых фишек в этот список.

Выделите ее, нажмите Alt+Enter, выберите Extract selected string part as format function argument, и PhpStorm поставит параметр в нужном месте: Предположим, у вас есть длинное выражение в sprintf, и вам нужно добавить еще один параметр вместо подстроки.

Также можно отделить подстроку конкатенацией:

Предпросмотр для структурного поиска (Structural Search)

Попробуйте его: Edit → Find → Search Structurally… Структурный поиск, или коротко SSR, — это мощный инструмент, который позволяет искать куски кода не только как текст, но как маленькие синтаксические деревья, при этом указывая типы узлов или другие фильтры.

В PhpStorm 2019. Проблема со структурным поиском в том, что описать шаблон поиска может быть нетривиальной задачей. Нет необходимости запускать поиск снова и снова, чтобы отладить шаблон. 2, к счастью, теперь можно видеть подсветку в реальном времени в редакторе.

Обычным поиском найти такое будет сложно, а с SSR — на раз! Представьте, например, что вы хотите найти все вызовы определенного метода у класса, но только такие, в которых в качестве параметра передается объект другого определенного класса.

HTTP клиент

Поддержка формата cURL

Почти все веб-инструменты для разработки и документации сейчас предоставляют возможность скопировать запрос как cURL-строку.

Создайте файл с расширением .http или новый HTTP-request scratch file с помощью сочетания клавиш Cmd+Shift+N (Ctrl+Shift+Alt+Insert), и затем вставьте строку запроса cURL. Теперь эту строку можно использовать в PhpStorm. Она автоматически будет сконвертирована в полный запрос, и дальше можно удобно экспериментировать с заголовками и другими параметрами запроса.

HTTP клиент хранит куки

Раньше куки-файл с информацией о сессии из первого запроса был бы утерян. Допустим, вы тестируете сервис и делаете запрос, чтобы аутентифицироваться, а затем в следующем запросе вызываете закрытый эндпоинт. 2 все куки сохраняются и передаются в последующих запросах. А в 2019.

Если вы не хотите, чтоб куки сохранялись, используйте тег @no-cookie-jar для конкретного запроса.

Version Control

Новый способ коммита без диалога

Чтобы закоммитить их, вы идете на вкладку Local Changes окна Version Control, выбираете нужные файлы и вызываете диалог коммита. Предположим, вы изменили несколько файлов в разных папках проекта. В этот момент все блокируется всплывающим окном, и вы не можете посмотреть проект.

2 же можно коммитить непосредственно из вкладки Local Changes. В PhpStorm 2019.

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

Чтобы попробовать ее, поставьте галочку “Commit from the Local Changes without showing a dialog” в Preferences | Version Control | Commit Dialog. Фича отключена по умолчанию.

Напоминания о связанных файлах

2 может подсказать вам добавить файлы, которые раньше часто изменялись вместе с теми, которые вы уже выбрали для коммита. Когда вы формируете коммит, PhpStorm 2019.

Улучшена работа с .gitignore

PhpStorm поддерживает .gitignore из коробки и подсвечивает игнорируемые файлы в Project view.

Это можно сделать в окне Version Control, вызвав Add to .gitignore из контекстного меню на файлах, которые еще не добавлены в систему контроля версий. Стало чуть легче добавлять в .gitignore.

В самом файле .gitignore теперь есть автодополнение путей, и по Cmd+click файл будет выделен в Project view.

В логе можно прятать колонки author, data или hash.

Сравнение текущего состояния с любой веткой

Для этого достаточно вызвать команду Show Diff with Working Tree из попапа Git Branches, который показывается по клику на имени текущей ветки в правом нижнем углу.

История директорий из Project View

Можно выделить несколько папок в Project View и посмотреть историю изменений для них с помощью команды Git | Show History from из контекстного меню.

Docker

Цель этого окна — собрать в одном месте все соединения и выполняющиеся процессы. Мы перенесли Docker в новое окно Services. Также можно добавить любые Run/Debug-конфигурации в окно Services. Пока по умолчанию в PhpStorm туда входит Docker и соединения с базами данных. Это доступно в секции Configurations available in Services в Run | Edit Configurations…

Все сервисы отображаются как узлы, но каждый из них можно сделать отдельной вкладкой, вызвав Show in New tab или просто перетащив узел заголовок окна Services.

Просмотр файловой системы контейнеров Docker

Навигировать по содержимому контейнера можно на вкладке Files.

Редактор

Дополнение кода при опечатках

Если вдруг вы написали funtcion или fnction вместо function — не страшно, потому что дополнение все равно сработает, так как распознает такого рода опечатки.

д. Это работает во всех языках и для всех символов — ключевых слов, классов, функций, свойств, методов и т.

Конфигурация поведения ‘Move Caret to Next Word’

Можно выбрать, куда будет ставиться указатель при перемещении по словам.Смотрите раздел Caret Movement в Preferences | Editor | General.

<

Перемещение за скобки и кавычки при нажатии Tab

Когда вы печатаете и нажимаете Tab, вместо добавления символа табуляции ваш курсор переместится за пределы кавычек и скобок. Старая фишка теперь включена по умолчанию. Чтобы отключить эту возможность, уберите галочку Jump outside closing bracket/quote with Tab when typing в разделе настроек Preferences | Editor | General | Smart Keys.

Выделенный код оборачивается в кавычки или скобки автоматически

Когда вы нажимаете кавычку (или скобку), выделив кусок кода, то в начале и конце выделения автоматически будут добавлены кавычки (или скобки). Еще одна суперполезная фишка теперь включена по умолчанию.

Если такое поведение вам не по душе, его можно отключить галочкой Surround selection on typing quote or brace в разделе Preferences | Editor | General | Smart Keys.

Новая раскладка по умолчанию на macOS

5+. Мы поменяли дефолтную раскладку на macOS с Mac OS X на macOS 10. 5 теперь называется Default for macOS, а старая Mac OS X теперь IntelliJ IDEA Classic. Еще мы переименовали раскладки: Mac OS X 10.

Подсветка синтаксиса для более чем 20 языков

2 вы будете приятно удивлены подсветке синтаксиса для Python, Ruby, Go и целой пачки других языков. Если у вас в проекте есть файлы на других языках программирования кроме PHP и JavaScript, то PhpStorm 2019. Это работает из коробки и никаких дополнительных настроек не требует.

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

Посмотреть полный список поддерживаемых из коробки языков можно в Preferences | Editor | TextMate Bundles. Подсветка синтаксиса для дополнительных языков работает на основе TextMate-грамматик.

Shell-скрипты

2 мы реализовали широкую поддержку shell-скриптов, включая дополнение путей, рефакторинг Rename, генерацию кода (Cmd+N/Alt+Insert) и пачку лайв-темплейтов (Cmd+J/Ctrl+J). В PhpStorm 2019.

Также реализована интеграция с несколькими внешними инструментами.

Для поиска потенциальных проблем в скриптах PhpStorm предложит установить Shellcheck, который находит тонну проблем и предоставляет быстрые фиксы для них.

2 интегрируется с инструментом mvdan/sh для форматирования shell-скриптов. Также в PhpStorm 2019. Когда вы вызовете Reformat Code в первый раз, IDE предложит установить его и затем будет правильно форматировать.

Можно выделить любую команду, нажать Alt+Enter и выбрать Explain shell. И, наконец, есть интеграция с сайтом Explainshell. При наведении на команду прямо в IDE также отображается хелп. IDE перенаправит на Explainshell, где можно будет посмотреть, что значит выбранный набор.

EditorConfig

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

2 он доступен из коробки и дополнительных действий не требуется. Раньше в PhpStorm требовалось установить плагин EditorConfig, но в 2019.

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

В файле .editconfig также можно задавать опции PhpStorm!

Раньше их можно было конфигурировать только из UI. Кроме стандартных для EditorConfig опций, можно конфигурировать почти все опции стиля, специфичные для PhpStorm. Такие опции обозначаются префиксом ij_, чтобы отличаться от стандартных.

Они будут добавлены закомментированными, и нужные можно раскомментировать и поменять. Если вы создаете новый файл .editorconfig из Project View, то PhpStorm предложит вам выбрать, какие опции включить в созданный файл.

Внешний вид

Больше информации в Project View

Можно включить отображение размера и даты изменения файлов в Project View с помощью View -> In-place Descriptions.

Новый вид всплывающей подсказки для инспекций

Чтобы применить его мгновенно, даже без подсказки и клика, нажмите Alt+Shift+Enter. Всплывающая подсказка теперь не только описывает проблему, но и предлагает первый фикс из списка. Чтобы посмотреть все доступные фиксы, нажмите Alt+Enter.

Обновленный UI на Windows

Свежий безрамочный вид на Windows 10:

А полный список изменений можно найти в очень больших release notes. PhpStorm, как всегда, включает в себя все обновления из WebStorm и из DataGrip.

И, напоследок, короткий ролик (на английском) с демонстрацией главных фич релиза:

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

Ваша команда JetBrains PhpStorm

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть