PhpStorm 2019.1: Отладка шаблонов Twig и Blade, поиск мертвого кода, улучшенное автодополнение, и многое другое

rtel_hwjoz5qkdpahlytjhn4d6u.png

Мы рады представить вам первый мажорный релиз PhpStorm в этом году!
Обзор релиза можно посмотреть на странице «What«s new». А под катом дополненный перевод этой страницы с демонстрацией наиболее интересных новых возможностей.
Скачать новую версию можно на сайте или с помощью Toolbox App. Как всегда, доступна 30-дневная пробная версия. Полную же версию могут использовать обладатели действующей подписки на PhpStorm или All Products pack, а также бесплатно студенты и разработчики проектов с открытым исходным кодом.

Всего в релизе было исправлено 1118 багов и добавлено множество новых фич. Вот наиболее интересные из них.

Отладка шаблонов Twig и Blade


Благодаря отладчику можно быстро разобраться с самым заковыристым багом, но вот чтобы найти проблемы в шаблонах, придется пробираться через дебри машинно-генерированного кода. В PhpStorm 2019.1 мы добавили возможность отлаживать оригинальные нескомпилированные файлы шаблонов .twig и .blade.php .

Все, что нужно — это указать путь к скомпилированным шаблонам (кэшу) в настройках IDE: Languages & Frameworks | PHP | Debug | Templates дляTwig или Blade.

В случае с Twig нужно также указать опции debug и auto_reload в конфигурации.
А для Blade все будет работать автоматически, но только начиная с версии Laravel 5.8.

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

r7fsczzthpvbsqdc1yy61wxcz04.gif

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

Обнаружение «мертвого кода»


PHP в этом году исполняется 24 года и не удивительно, что часто приходится сталкиваться с легаси-кодом. Первое, что хочется сделать — это подчистить и удалить лишнее. Новая инспекция «Unused declaration» как раз поможет в этом деле.
PhpStorm 2019.1 может на лету анализировать ваш код и подсвечивать прямо в редакторе те классы, члены классов, и функции, которые, вероятно, нигде не используются.

smhr5sg-jrur8xdv46b4numhkdi.png

Также можно найти все неиспользуемые элементы в пакетном режиме. Для этого надо вызвать меню Code → Run Inspection by Name и выбрать инспекцию Unused Declaration inspection. В результате вы получите отчет со списком всех проблем с описанием и быстрыми исправлениями.

jv61uagjjta9hl8jrsbxds--ozc.gif

Новые рефакторинги и быстрые действия


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

Манипулирование строками
Если нажать Alt+Enter на любом строковом выражении, вы увидите целый список доступных преобразований. Например, там уже есть конвертация из/в NOWDOC/HEREDOC, замена кавычек, разделение строки на две с конкатенацией.
А в этом релизе мы добавили еще несколько удобных штук — копирование конкатенированной строки в буфер, замена конкатенации строк интерполяцией или вызовом функции sprintf () и, соответственно, обратные действия:

moocgyy-bm15bcsp09jv_d6-_cm.gif

Удаление неиспользуемых переменных
Новая инспекция обнаружит и позволит удалить неиспользуемую переменную в операциях присваивания и конструкциях use в замыканиях.

6qlm9h_tabcnkvb-ujxlmtecgtk.png

Рефакторинг Move to Class
С помощью этого рефакторинга можно безопасно перемещать функции из PHP-файлов в классы. PhpStorm при этом обновит все вызовы этих функций.

5ffrkut_crwr-0otofhbufdxwwg.gif

При наведении порядка может понадобиться переместить сразу несколько функций — это PhpStorm тоже поддерживает. Надо выбрать желаемые функции в окне Structure и затем вызвать рефакторинг Move to Class.

Инспекция Method May Be «static»
Эта инспекция обнаружит методы, которые можно преобразовать в статические, то есть те, в которых нет использования экземпляра класса. У таких методов будет доступно контекстное действие — можно нажать Alt-Enter и выбрать «Make static». Как полагается, все вызовы будут исправлены автоматически.

nevi9nq50kr94y95kzmpmrhhuvm.gif

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


С помощью файла .phpstorm.meta.php можно подсказывать IDE, какие аргументы ожидаются в функции или какие значения она может возвращать. PhpStorm будет использовать эту информацию для автодополнения.
Скажем функция ожидает в качестве аргумента какую-то константу. Формально тип этой константы, допустим, integer, но в действительности набор возможных констант нам известен.
Например, json_encode($data, /* вот тут битовая маска из констант JSON_* */)
Также у нас может быть функция, которая возвращает константу, как например json_last_error().
В PhpStorm 2019.1 автодополнение для этих и многих других встроенных функций уже работает из коробки:
llmjt9cx62iz412lesphg0jf0ka.png
nqgurpxxiacueekkd-aiwzw3gxe.png

Более того, такое автодополнение можно сделать у себя в любом проекте/библиотеке/фреймворке просто добавив специальный файл .phpstorm.meta.php в проект. И таких файлов может быть множество, PhpStorm сам найдет и объединит их.
Например, такие файлы уже есть для Symfony в виде пакета King2500/symfony-phpstorm-meta — он поставляется вместе с плагином Symfony.
Подробнее в посте о новых возможностях .phpstorm.meta.php.

Оптимизации импортов


Была несколько переработана система анализа и исправления импортов. Теперь, где это возможно, PhpStorm будет предлагать заменить полное имя класса импортом или удалить его вовсе, если оно избыточно.
Также добавлена возможность сортировать выражения use по алфавиту или по длине

Инструмент очистки кода Code Cleanup


Этот инструмент позволяет осуществлять безопасные преобразования в пакетном режиме. Например, во всем проекте сразу, или в определенной директории и т.д.
В PhpStorm он был доступен давно, но только в 2019.1 в нем были добавлены возможности для PHP. Прежде всего это поддержка двух инструментов для исправления стиля кодирования: PHP CS Fixer и phpcbf из PHP_CodeSniffer. А также две инспекции для оптимизации импортов из предыдущего пункта.

qb6fhe8pohxpghbf767mt1hymsu.png

Этом инструмент можно запускать в любое время вручную или перед коммитом просто поставив соответствующую галочку в диалоге коммита:

u6h2rxuluoghdv3mbh2spywfsjk.png

Переиспользование Docker-контейнеров


Добавлена поддержка запуска Docker-контейнеров в режимах docker-compose run и docker-compose exec. Первый режим подойдёт для легковесных контейнеров, которые останавливаются сразу после запуска. Второй позволяет переиспользовать запущенные контейнеры без необходимости перезапуска.

5tw5bg-hy2dr5mgenggkjwzdgdw.png

Среди других улучшений:

  • Гибкие настройки PHPDoc: можно настраивать порядок элементов и отступы в Preferences | Editor | Code Style | PHP вкладка PHPDoc;
  • Очищен шаблон PHP-файлов по умолчанию — больше никакого «Created by PhpStorm»;
  • Новое быстрое действие для добавления свойства класса в конструктор;
  • Можно включить строгий режим глобально,
    даже если в файлах нет директивы declare(strict_types = 1);
    v1s46yoign6l6luxytomepud0hs.png


VCS


В системе контроля версий сделано много полезных улучшений:

  • В Git log добавлены действия Fixup, Squash, и Cherry-pick;
  • При просмотре диффов теперь можно менять панели местами;
  • Пуш с форсом теперь более безопасный, потому что используется флаг --force-with-lease;
  • В диалоге коммита добавлена опция «Uncheck all» для частичных коммитов — с помощью нее можно отключить все изменения и потом выбрать только нужные:
    mjafod0xlz9286br6avhdrmkzzi.gif

Улучшения IDE


Диалог Recent Locations
Большую часть времени при работе над задачей разработчикам приходится читать код, а не писать. Поэтому быстрая навигация между файлами всегда очень актуальна. В PhpStorm уже были попап Search Everywhere (Shift-Shift), Закладки и Избранное (Cmd+2 / Alt+2), переход по истории вперед и назад (Cmd+[ Cmd+] / Ctrl+Alt+Left Ctrl+Alt+Right), или просмотр последних файлов (Cmd+E / Ctrl+E).
В PhpStorm 2019.1 мы добавили еще одну интересную возможность — диалог Recent Locations (Cmd-Shift-E / Ctrl+Shift+E), который покажет последние куски кода, которые вы просматривали или редактировали. Это может пригодиться, если вы хотите быстро переместиться по истории и видеть контекст, чтобы понять куда именно.

fectijdrtqsvckrv8tcjicvaosw.gif

Новые темы
PhpStorm поставляется с тремя темами: Light, Darcula и High Contrast. Если вы хотите попробовать что-то свежее, то установите одну из новых тем: Dark Purple, Gray или Light Cyan. Также теперь темы можно создавать и самостоятельно, при этом есть возможность задавать цвет любого элемента или иконки. Подробнее — в документации.

heijwkl6m4ijecr2fcqexqpo70g.png

Soft-wraps в зависимости от типа фала
Если вы часто работаете с markdown или текстовыми файлами, то теперь перенос строк для них будет включен автоматически. Вы также можете задать другие типы файлов в настройках Preferences | Editor | General | Soft-wrap files.

PhpStorm как всегда включает в себя все обновления из WebStorm:
Документация CSS-свойств, HTML-тегов и поддержки браузеров теперь берётся из MDN и содержит ссылки на соответствующие статьи, улучшилась поддержка TypeScript во Vue-приложениях, добавилось 17 новых инспекций для Angular-приложений, а в панелях отладчиков JavaScript и Node.js появились новые интерактивные консоли.

… и из DataGrip:
Теперь дополнительно поддерживаются Greenplum, Vertica, Apache Hive; появилась возможность выбрать папку проектов по умолчанию;, а также улучшились средства автодополнения конструкций и атрибутов.

Пожалуй, это все, о чем мы хотели бы вам рассказать. Но это далеко не все, что вошло в релиз. Полный список изменений, как всегда, можно найти в очень большом release notes.

Спасибо за внимание!
Команда JetBrains PhpStorm

© Habrahabr.ru