Live templates
Во время разработки мы часто печатаем стандартные, повторяющиеся структуры, с небольшими отличиями: циклы, if-ы, объявляем методы, бросаем исключения и т.д. Live templates позволяет автоматизировать создание этих структур.
В PhpStorm есть ряд стандартных live темплейтов. Давайте рассмотрим один для примера.
Я напечатал fore
, нажал Tab и получил готовый блок foreach. Более того, PhpStorm автоматически начал переносить каретку ввода сначала на iterable expression, затем за блок as
, чтобы я мог задать свое название ключа/значения, и в конце перенес каретку ввода в тело цикла.
С помощью этой механики мы можем экономить массу времени при написании стандартных конструкций. Давайте разберем настройки “Live templates”, чтобы лучше разобраться в принципе работы этого механизма.
Переходим в Settings -> Editor -> Live Templates -> PHP -> fore
:
Поле | Описание |
---|---|
Abbreviation | сокращение нашего темплейта, по сути шорткат, которым он вызывается |
Description | описание темплейта (отображается рядом с аббревиатурой в списке темплейтов и при выводе в списке completions) |
Template text | собственно сам темплейт |
Options: expand with | “горячая клавиша”, при нажатии которой будет разворачиваться темплейт |
Options: reformat according to style | после разворачивания темплейта он будет отформатирован согласно вашим настройкам Code Style |
Applicable in *; statement. Chandge | контекст, в котором этот темплейт может развернуться |
Также у нас есть кнопка Edit Variables
, которую мы рассмотрим позже.
Итак, содержание темплейта fore
:
foreach ($ITERABLE$ as $VAR_VALUE$) {
$END$
}
$ITERABLE$
, $VAR_VALUE$
- это так называемые “пользовательские” переменные.
В процессе разворачивания темплейта каретка ввода будет поочередно подставляться на место каждой переменной, как это было продемонстрировано на гифке выше. Для перехода к следующей точке остановки, во время развертывания темплейта, нужно нажать Enter или Tab.
$END$
- это стандартная переменная. Она обозначает, что в этой точке нужно остановить каретку ввода, когда темплейт развернется.
На гифке можно наблюдать еще одну особенность - массив $users
мы выбираем вручную, а значение $user
на место пользовательской переменной $VAR_VALUE$
, подставляется автоматически. Как это происходит?
Дело в настройках переменных, которые прячутся под кнопкой Edit Variables
. Нажимаем на нее и видим следующее окно:
Все пользовательские переменные добавляются в эту табличку автоматически. В табличке есть 4 колонки:
Название | Описание |
---|---|
NAME | название переменной |
Expression | спец. функция, которая будет применена к переменной. Их достаточно много, почитать про них можно тут. На примере переменной $VAR_VALUE$ можно увидеть, что для нее установлен expression phpSuggestVariableName() . Как следует из названия - при развертывании темплейта PhpStorm попытается угадать название переменной.Важный нюанс: для работы phpSuggestVariableName() дефолтное значение должно быть заполнено именно так, как показано на скрине. |
Default value | Ничего особенного, но есть нюанс. Дефолтное значение также является выражением, которое может ссылаться на другой Live Template. Если ваше дефолтное значение - литерал, оно должно быть обернуто в двойные кавычки, напр. "$item"
|
Skip if defined | PhpStorm не будет останавливаться на месте этой переменной, если ее значение уже заполнено (например, если phpSuggestVariableName смог ее предсказать). |
Разберите самостоятельно еще парочку примеров стандартных темплейтов и сможете без проблем создавать свои.
Важно: при добавлении своих темплейтов не забывайте выбирать контекст Applicable in ...
. Иначе ваш темплейт не будет доступен ни в одном контексте (ни в одном “языке”).
Для примера, вот мой темплейт fore
для HTML контекста
<? foreach ($ITERABLE$ as $VAR_VALUE$) { ?>
$END$
<? }?>
Настройки переменных идентичны оригинальному fore
. Этот темплейт я использую для написания foreach
во вьюшках.
Также для HTML контекста у меня есть темплейты для вызова глобальных функций перевода, экранирования, установки layout, конструкции if
и т.д. Это мощный инструмент, который ограничивается только вашей фантазией и желанием оптимизировать свой workflow.