Уже 5й год пользуюсь IntelliJ IDEA и не могу нарадоваться. Мощная IDE! Поражает воображение обилие и гибкость настроек. В частности, очень много удобства предоставляют Live Templates. Макросы. Набрав в коде сигнатуру темплэйта и нажав tab, получаем автоматически сгенерённый контентно-зависимый кусок кода. Поюзав встроенные LT не смог не написать несколько своих. Соответственно, хочу поделиться своими темплэйтами и предложить поделиться вашими. Пустячок, мелочь, до конца так и не разобрался, толкового раскрытия темы в интернетах я так и не нашел, но - лиха беда начало.
Погнали.
Темплэйты встроены в блок js, но при этом пишу на typeScript.
Самое любимое занятие программера - это сцуко отладка.
Когда тебе надо вывести какое-то значение, пишешь обычно: 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>
Чтобы добавить его в Идею, код надо скопировать в клипборд, нажать в настройках Идеи ПКМ и вставить:
Готово. Далее в своем коде пишем trc+tab и получаем эстетику и удобство:
console.log('★ GameRoomWindow.constructor');
console.log('★ GameRoomWindow.onSlideHandler');
ну и так далее для любого класса метода.
Головная боль номер два: деструкторы. Типичная портянка (почти):
Макрос должен работать с переменной. Возьмём её из клипборда.
Текст темплэйта:
if (this.$VAR$) { this.$VAR$.destroy(); this.$VAR$ = null; }
Настройка источника переменной:
Код темплэйта:
<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