Всем привет! Мы рады представить вам второй мажорный релиз PhpStorm в этом году!
Обзор релиза можно посмотреть на странице “What’s new”. А под катом подробный разбор всех заметных изменений и новых возможностей. (Осторожно — очень много картинок!)
Скачать новую версию можно на сайте или с помощью Toolbox App. Как всегда, доступна 30-дневная пробная версия. Полную же версию могут использовать обладатели действующей подписки на PhpStorm или All Products pack, а также бесплатно студенты и разработчики проектов с открытым исходным кодом.
PHP 7.4: типизированные свойства
PHP 7.4 обещает быть самым крутым и богатым на новые возможности релизом со времен PHP 7.0! Посмотрите на все принятые в нем RFC.
Самая ожидаемая фича это, конечно же, типизированные свойства, и PhpStorm 2019.2 уже полностью их поддерживает! Включая подсветку, вывод и резолв типов, а также всевозможные проверки.
Если вы попытаетесь положить в свойство что-то не то — PhpStorm сразу об этом предупредит.
А вот чтобы подготовиться к миграции на PHP 7.4, который выйдет в конце ноября, в PhpStorm есть быстрые фиксы. Для объявления типа можно нажать Alt+Enter
на свойстве без типа и выбрать Add declared type for the field. PhpStorm определит тип свойства на основе информации в PHPDoc, дефолтном значении или декларации типа аргумента, если свойство внедряется через конструктор.
Оператор ??= (null coalesce assign)
Новый короткий оператор присваивания с проверкой на null довольно удобен в случае громоздких выражений.
В PhpStorm, само собой, поддерживается синтаксис, но еще есть быстрый фикс Alt+Enter
для того, чтобы заменить ??
там, где это возможно:
Оператор распаковки (...) в массивах
PHP поддерживает распаковку аргументов с помощью оператора …
еще с версии 5.6. В предстоящем релизе PHP оператор можно будет использовать и в массивах:
PhpStorm проанализирует использование оператора на корректность и удостоверится, что вы распаковываете только массивы или объекты Traversable и не пытаетесь по ошибке сделать что-то не поддерживаемое интерпретатором PHP:
В следующем релизе PhpStorm 2019.3 мы планируем реализовать полную поддержку и быстрые фиксы для всех новых возможностей PHP 7.4, включая стрелочные функции, разделители в числовых литералах и др.
Автовнедрение регулярных выражений в PHP
В предыдущих версиях PhpStorm регулярные выражения в PHP-коде по умолчанию никак не подсвечивались и отображались как обычные строки. Конечно, можно было внедрить язык RegExp вручную, но не будешь же делать это по всему проекту.
В PhpStorm 2019.2 добавлена полная поддержка регулярок в PHP! Это значит, что там, где в коде используются функции preg_*,
шаблоны будут подсвечиваться и проверяться на валидность.
Более того, теперь можно протестировать регулярное выражение прямо в IDE! Наведите указатель на шаблон, нажмите Alt+Enter
и вызовите Check RegExp.
Подсветка дублированного кода на лету
Поиск дубликатов в PhpStorm есть уже довольно давно, в меню Code > Locate Duplicates. Если вы пока его не пробовали, попробуйте — и удивитесь, как много повторений может быть в проекте!
В этом релизе анализ на дублирование вышел на новый уровень и работает на лету прямо в редакторе. Если вы многократно скопировали или случайно написали одинаковые куски, то узнаете об этом мгновенно.
Вы сможете перейти к другому дубликату или просмотреть все списком в отдельном окне:
Кстати, это хорошие кандидаты на рефакторинг Extract.
Новая инспекция называется Duplicated code fragment и включена по умолчанию. Порог чувствительности можно установить в разделе Preferences | Editor | Inspections | General | Duplicated code fragment > PHP. А в Preferences | Editor | Duplicates можно установить, какие элементы будут игнорироваться при поиске дубликатов, например можно не учитывать разные имена переменных, методов или свойств, а также значений констант.
Поддержка формата PHPT
Хотели бы контрибьютить в сам PHP и присоединиться к PHP Internals? Лучший способ — начать с документации и тестов! К счастью, для этого нет необходимости знать C. Тесты для PHP пишутся в специальных файлах .phpt. По сути, это текстовый файл, разбитый на несколько секций, некоторые из которых могут содержать PHP-код.
Так вот, в PhpStorm 2019.2 есть и поддержка phpt-файлов! Секции подсвечиваются, PHP и INI автоматически внедряются там где нужно, работают переходы на внешние файлы в соответствующих секциях.
Больше информации о написании тестов для PHP есть тут: PHP TestFest Tutorials, PHP Internals Book и qa.php.net.
Запуск Composer через любой PHP-интерпретатор
Ранее для запуска Composer всегда нужен был локальный интерпретатор PHP. Проблема в том, что его может не быть вовсе или окружение может не соответствовать продакшену. Теперь в PhpStorm 2019.2 запускать Composer можно через любой интерпретатор, сконфигурированный в IDE. Например, через Docker, Docker-compose, Vagrant или, скажем, удаленный сервер по SSH.
Чтобы попробовать эту возможность, выберите Remote Interpreter в настройках Preferences | Languages & Frameworks | PHP | Composer.
Выберите существующий интерпретатор или добавьте новый!
Быстрые фиксы
Разбиваем список на несколько строк и наоборот
Согласно PSR-2, строка больше 80 символов в длину должна быть разбита на несколько строк, каждая из которых короче 80 символов. Поэтому, если у вас есть большой массив или аргументы/параметры функции не помещаются на экране, то можно нажать на них Alt+Enter
и выбрать Split comma-separated values into multiple lines:
Если вдруг в результате рефакторинга список стал короче и помещается в одну строку, то обратное действие тоже доступно: Join comma-separated values into a single line.
Кстати, тут вам может понадобиться быстро поправить настройки стиля кода. Чтобы долго не искать нужные опции, выберите этот кусок кода, нажмите Alt+Enter
и вызовите Adjust code style settings. PhpStorm при этом предложит поменять только те опции, которые актуальны для выбранных строк:
Конструкция switch
Мы реализовали возможность быстро добавлять ветки в конструкции switch. Нажмите Alt+Enter
на выражении case без тела и вызовите Copy ‘switch’ branch.
Не забудьте отредактировать скопированную ветку, иначе PhpStorm будет подсвечивать повторяющийся кусок:
Также PhpStorm 2019.2 предупредит, если в switch
нет дефолтной ветки, а добавить ее можно также с помощью быстрого фикса.
Манипулирование строками
PhpStorm поможет с рутинными операциями над строками. Что бы вам ни пришлось делать со строкой — разбить на части, изменить кавычки, конвертировать конкатенацию в sprintf
или интерполяцию, или что-либо еще — жмите Alt+Enter
на строке и выбирайте нужное действие из списка.
В этом релизе мы добавили пару новых фишек в этот список.
Предположим, у вас есть длинное выражение в sprintf
, и вам нужно добавить еще один параметр вместо подстроки. Выделите ее, нажмите Alt+Enter
, выберите Extract selected string part as format function argument, и PhpStorm поставит параметр в нужном месте:
Также можно отделить подстроку конкатенацией:
Предпросмотр для структурного поиска (Structural Search)
Структурный поиск, или коротко SSR, — это мощный инструмент, который позволяет искать куски кода не только как текст, но как маленькие синтаксические деревья, при этом указывая типы узлов или другие фильтры. Попробуйте его: Edit > Find > Search Structurally…
Проблема со структурным поиском в том, что описать шаблон поиска может быть нетривиальной задачей. В PhpStorm 2019.2, к счастью, теперь можно видеть подсветку в реальном времени в редакторе. Нет необходимости запускать поиск снова и снова, чтобы отладить шаблон.
Представьте, например, что вы хотите найти все вызовы определенного метода у класса, но только такие, в которых в качестве параметра передается объект другого определенного класса. Обычным поиском найти такое будет сложно, а с SSR — на раз!
HTTP клиент
Поддержка формата cURL
Почти все веб-инструменты для разработки и документации сейчас предоставляют возможность скопировать запрос как cURL-строку.
Теперь эту строку можно использовать в PhpStorm. Создайте файл с расширением .http или новый HTTP-request scratch file с помощью сочетания клавиш Cmd+Shift+N (Ctrl+Shift+Alt+Insert)
, и затем вставьте строку запроса cURL. Она автоматически будет сконвертирована в полный запрос, и дальше можно удобно экспериментировать с заголовками и другими параметрами запроса.
HTTP клиент хранит куки
Допустим, вы тестируете сервис и делаете запрос, чтобы аутентифицироваться, а затем в следующем запросе вызываете закрытый эндпоинт. Раньше куки-файл с информацией о сессии из первого запроса был бы утерян. А в 2019.2 все куки сохраняются и передаются в последующих запросах.
Если вы не хотите, чтоб куки сохранялись, используйте тег @no-cookie-jar
для конкретного запроса.
Version Control
Новый способ коммита без диалога
Предположим, вы изменили несколько файлов в разных папках проекта. Чтобы закоммитить их, вы идете на вкладку Local Changes окна Version Control, выбираете нужные файлы и вызываете диалог коммита. В этот момент все блокируется всплывающим окном, и вы не можете посмотреть проект.
В PhpStorm 2019.2 же можно коммитить непосредственно из вкладки Local Changes.
Теперь, работая над коммитом, вы можете просматривать весь проект, историю и, вообще, делать в IDE все что угодно.
Фича отключена по умолчанию. Чтобы попробовать ее, поставьте галочку “Commit from the Local Changes without showing a dialog” в Preferences | Version Control | Commit Dialog.
Напоминания о связанных файлах
Когда вы формируете коммит, PhpStorm 2019.2 может подсказать вам добавить файлы, которые раньше часто изменялись вместе с теми, которые вы уже выбрали для коммита.
Улучшена работа с .gitignore
PhpStorm поддерживает .gitignore
из коробки и подсвечивает игнорируемые файлы в Project view.
Стало чуть легче добавлять в .gitignore
. Это можно сделать в окне Version Control, вызвав Add to .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. Цель этого окна — собрать в одном месте все соединения и выполняющиеся процессы. Пока по умолчанию в PhpStorm туда входит Docker и соединения с базами данных. Также можно добавить любые Run/Debug-конфигурации в окно Services. Это доступно в секции 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
Мы поменяли дефолтную раскладку на macOS с Mac OS X на macOS 10.5+. Еще мы переименовали раскладки: Mac OS X 10.5 теперь называется Default for macOS, а старая Mac OS X теперь IntelliJ IDEA Classic.
Подсветка синтаксиса для более чем 20 языков
Если у вас в проекте есть файлы на других языках программирования кроме PHP и JavaScript, то PhpStorm 2019.2 вы будете приятно удивлены подсветке синтаксиса для Python, Ruby, Go и целой пачки других языков. Это работает из коробки и никаких дополнительных настроек не требует.
Этим мы хотим улучшить опыт использования PhpStorm для пользователей, которым иногда требуется посмотреть код на других языках. PhpStorm по-прежнему главным образом среда для PHP и веб-разработки, поэтому мы не планируем расширять возможности поддержки других языков за пределы подсветки.
Подсветка синтаксиса для дополнительных языков работает на основе TextMate-грамматик. Посмотреть полный список поддерживаемых из коробки языков можно в Preferences | Editor | TextMate Bundles.
Shell-скрипты
В PhpStorm 2019.2 мы реализовали широкую поддержку shell-скриптов, включая дополнение путей, рефакторинг Rename, генерацию кода (Cmd+N/Alt+Insert)
и пачку лайв-темплейтов (Cmd+J/Ctrl+J)
.
Также реализована интеграция с несколькими внешними инструментами.
Для поиска потенциальных проблем в скриптах PhpStorm предложит установить Shellcheck, который находит тонну проблем и предоставляет быстрые фиксы для них.
Также в PhpStorm 2019.2 интегрируется с инструментом mvdan/sh для форматирования shell-скриптов. Когда вы вызовете Reformat Code в первый раз, IDE предложит установить его и затем будет правильно форматировать.
И, наконец, есть интеграция с сайтом Explainshell. Можно выделить любую команду, нажать Alt+Enter
и выбрать Explain shell. IDE перенаправит на Explainshell, где можно будет посмотреть, что значит выбранный набор. При наведении на команду прямо в IDE также отображается хелп.
EditorConfig
Добавляя файл .editorconfig, вы делаете разработку в команде более приятной, так как определенные опции стиля будут у всех работать одинаково независимо от используемого редактора.
Раньше в PhpStorm требовалось установить плагин EditorConfig, но в 2019.2 он доступен из коробки и дополнительных действий не требуется.
Вы можете задавать разные настройки для разных подпапок в проекте. Просто создаете в нужных папках файлы .editorconfig
— их в проекте может быть сколько угодно.
В файле .editconfig также можно задавать опции PhpStorm!
Кроме стандартных для EditorConfig опций, можно конфигурировать почти все опции стиля, специфичные для PhpStorm. Раньше их можно было конфигурировать только из UI. Такие опции обозначаются префиксом ij_
, чтобы отличаться от стандартных.
Если вы создаете новый файл .editorconfig из Project View, то PhpStorm предложит вам выбрать, какие опции включить в созданный файл. Они будут добавлены закомментированными, и нужные можно раскомментировать и поменять.
Внешний вид
Больше информации в Project View
Можно включить отображение размера и даты изменения файлов в Project View с помощью View -> In-place Descriptions.
Новый вид всплывающей подсказки для инспекций
Всплывающая подсказка теперь не только описывает проблему, но и предлагает первый фикс из списка. Чтобы применить его мгновенно, даже без подсказки и клика, нажмите Alt+Shift+Enter
. Чтобы посмотреть все доступные фиксы, нажмите Alt+Enter
.
Обновленный UI на Windows
Свежий безрамочный вид на Windows 10:
PhpStorm, как всегда, включает в себя все обновления из WebStorm и из DataGrip. А полный список изменений можно найти в очень больших release notes.
И, напоследок, короткий ролик (на английском) с демонстрацией главных фич релиза:
На этом все на этот раз. Спасибо, что дочитали до конца! Вопросы, пожелания, баг-репорты и просто мысли высказывайте в комментариях! Будем рады ответить.
Ваша команда JetBrains PhpStorm
Комментарии (100)
sazareks
26.07.2019 12:06+1А когда у вас появится возможность в автокомплите выключать бестолковые дополнения и делать сортировку например по тем которые чаще всего используются? Ну например я вот часто работаю с css и часто использую margin пишу ma и почему-то выбран по умолчанию margin-bottom а не просто margin?
mavir
26.07.2019 13:22+1В Вашем случае пригодятся возможности Emmet для автодополнения. Для margin, например:
m20 + Tab = margin: 20px;
p8 + Tab = padding: 8px;
fz14 + Tab = font-size: 14px; и т.д.
tronin
26.07.2019 15:54+1Сейчас автокомплит учитывает частоту использования тех или иных вариантов. У меня, к примеру, в css
ma
комплитися именно в margin.
Можете попробовать удалить папку~\.PhpStorm<версия>\system\stat
чтобы сбросить "весы" комплишена.
alexantr
26.07.2019 12:15+1Функций полезных новых много, но что там делают дизайнеры? Светлый интерфейс стал еще светлее и неконтрастнее. Например, теперь найти активную вкладку стало труднее: разница в яркости — 3% и теперь приходится выискивать тонкую синюю линию, а когда вкладки расположены вертикально, это сделать еще труднее.
tronin
26.07.2019 16:01Эта проблема сейчас обсуждается внутри команды. Попробуйте выключить "Use in Editor Tabs" в File | Settings | Appearance & Behavior | File Colors.
alexantr
29.07.2019 12:18Проблема не с цветными вкладками, а с обычными. Они стали все светло серые и на некоторых мониторах могут вообще не различаться. Да и цветные мне нужны. Просто раньше неактивные вкладки затенялись, был хороший контраст с четкими границами.
Как по мне, дизайн становится современнее, но теряет удобство. Например, год назад перерисовали иконки, но не все. Часть просто убрали. И после обновления вручную добавленные кнопки на тулбаре стали без своих иконок.tronin
30.07.2019 15:41Фидбэк по проблеме с малоконтрастными вкладками собирается здесь: https://youtrack.jetbrains.com/issue/IDEA-219204. Можете также прокомментировать/проголосовать.
GenkaOk
26.07.2019 12:30Пользуюсь JetBrains Toolbox и заметил, что скетчи не переносятся с версиями.
Сейчас обновился на 2019.2 и все скетчи, что были остались в старой версии.
Или я что-то делаю не так?tronin
26.07.2019 16:05Вы имеете ввиду scratches? Должны переноситься. Settings Repository не пользуетесь случайно? Если нажмете RMB по скретч файлу > Show in Explorer — откроет папку
~\.PhpStorm2019.2\config\scratches
?
Akuma
26.07.2019 12:32А это только у меня каждый релиз меняются шрифты?
Вроде бы неплохо, но блин, каждый раз новый шрифт.
Кстати, проверка регулярок работает как будто они обрамлены в ^$
prnt.sc/okata7
Хотя по факту это не такtronin
26.07.2019 16:11Поменялся line spacing с 1.0 на 1.2. Также были различные фиксы в нашем рантайме связанные с рендерингом, например https://youtrack.jetbrains.com/issue/JBR-1008. Можете еще написать нам на наш трекер на https://youtrack.jetbrains.com/newIssue, приложить скриншоты до/после и мы посмотрим проблему детальнее.
Akuma
26.07.2019 16:32Не уверен в правильности моего английского, так что если что, поправьте пожалуйста: youtrack.jetbrains.com/issue/WI-47750
AndrewShmig
26.07.2019 23:39А я после обновления минут 5 очки протирал — никак не мог поверить, что шрифт изменился :)
tronin
30.07.2019 15:42Рендеринг некоторых шрифтов действительно поменялся: https://youtrack.jetbrains.com/issue/JBR-1624. Исправим это в следующем минорном обновлении.
Gemorroj
Сделали неудобной "Run command". Теперь я не могу ее держать постоянно открытой в табе (в sidebare).
Пользовался как консолью с автокомплитом и историей вместо терминала в windows.
tronin
Было б здорово, если б вы описали свой «workflow» завязанный на Command Line Tool Support на нашем трекере: youtrack.jetbrains.com/newIssue. Как я вижу сейчас действительно нельзя закрепить run anything как тулбар. Возможно получится опционально вернуть старый вид «Run command» если будет много заинтересованных.
psFitz
+
tyraelqp
Это на самом деле проблема — раньше это был отдельный таб, в котором работал автокомплит по command line tools. Достаточно было написать, условно,
mig
и мы получалиdoctrine:migrations:migrate
. Сейчас же, в новом окне, автокомплита по добавленным tools'ам вообще нету.tronin
Постараемся решить эту проблему в короткие сроки: https://youtrack.jetbrains.com/issue/WI-47729