Live Templates. Макросы

Уже 5й год пользуюсь IntelliJ IDEA и не могу нарадоваться. Мощная IDE! Поражает воображение обилие и гибкость настроек. В частности, очень много удобства предоставляют Live Templates. Макросы. Набрав в коде сигнатуру темплэйта и нажав tab, получаем автоматически сгенерённый контентно-зависимый кусок кода. Поюзав встроенные LT не смог не написать несколько своих. Соответственно, хочу поделиться своими темплэйтами и предложить поделиться вашими. Пустячок, мелочь, до конца так и не разобрался, толкового раскрытия темы в интернетах я так и не нашел, но - лиха беда начало.

Погнали.
Темплэйты встроены в блок js, но при этом пишу на typeScript.

Live Templates. Макросы IT, Программирование, Jetbrains, Макрос, Длиннопост

Самое любимое занятие программера - это сцуко отладка.
Когда тебе надо вывести какое-то значение, пишешь обычно: console.log(myVar);
Смотришь на эту циферку и радуешься. Отладил и забыл. А трэйс не убрал. И коллеги тоже своих трэйсов запушили. И где-то через пару месяцев смотришь в консоль и не можешь понять, откуда это вот 100500 вылазит в коде? Роешься, ищешь чтобы прибить. Мало кто заморачивается писать console.log('отладка в классе таком-то', myVar), чтобы потом найти этот трэйс поиском. Приходится выискивать все console.log, а их обычно МНОГО.


Автоматизируем написание трэйсов с вводом текущего класса и выбранного метода.


Текст темплэйта:
console.log('★ $CLASS$.$NAME$');$END$

Теперь непосредственно сам КОД этого тэмплэйта:

<template name="trc" value="console.log('★ $CLASS$.$NAME$');$END$" description="trace console log" toReformat="true" toShortenFQNames="true">

<variable name="CLASS" expression="jsClassName()" defaultValue="" alwaysStopAt="true" />

<variable name="NAME" expression="jsMethodName()" defaultValue="" alwaysStopAt="true" />

<context>

<option name="JAVA_SCRIPT" value="true" />

<option name="TypeScript" value="true" />

</context>

</template>

Чтобы добавить его в Идею, код надо скопировать в клипборд, нажать в настройках Идеи ПКМ и вставить:

Live Templates. Макросы IT, Программирование, Jetbrains, Макрос, Длиннопост

Готово. Далее в своем коде пишем trc+tab и получаем эстетику и удобство:

console.log('★ GameRoomWindow.constructor');

console.log('★ GameRoomWindow.onSlideHandler');

ну и так далее для любого класса метода.



Головная боль номер два: деструкторы. Типичная портянка (почти):

Live Templates. Макросы IT, Программирование, Jetbrains, Макрос, Длиннопост

Макрос должен работать с переменной. Возьмём её из клипборда.

Текст темплэйта:
if (this.$VAR$) { this.$VAR$.destroy(); this.$VAR$ = null; }


Настройка источника переменной:

Live Templates. Макросы IT, Программирование, Jetbrains, Макрос, Длиннопост

Код темплэйта:

<template name="des" value="if (this.$VAR$) { this.$VAR$.destroy(); this.$VAR$ = null; }" description="Make Destructor" toReformat="false" toShortenFQNames="true">

<variable name="VAR" expression="clipboard()" defaultValue="" alwaysStopAt="true" />

<context>

<option name="TypeScript" value="true" />

</context>

</template>

Копируем имя переменной, пишем в деструкторе des+tab и всё - готово. Одно удовольствие.

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

Ну и по мелочи. Чтобы не писать длинные строки вида "APP.localization.getText('')", использую такую LT:
Код темплэйта:

<template name="loc" value="APP.localization.getText('')" description="APP.localization.getText()" toReformat="false" toShortenFQNames="true">

<context>

<option name="JAVA_SCRIPT" value="true" />

<option name="TypeScript" value="true" />

</context>

</template>

На этом всё. Жду Ваших предложений :)


•dnf