Хабрахабр

Создание шаблонов в IDE от Jetbrains

Вступление

Сегодня я хочу привести небольшой обзор-туториал темплейтов в ИСР от Jetbrains. Приведенные ниже примеры будут реализованы на Java в Intellij IDEA, но механизм создания одинаков и для других языков и продуктов компании. Думаю все программирующие в данной IDE пользовались встроенными шаблонами. Например когда вы пишете fori, нажимаете TAB или ENTER и у вас появляется цикл for в котором нужно указать имя переменной и условие, а остальной код генерируется за вас.

for (int i = 0; i < ; i++)

Или же знакомый всем java-программистам sout -> System.out.println(). Так вот, в Intellij есть поддержка создания своих шаблонов кода. На удивление не нашёл практически никакой инфы на русском и довольно мало на английском(благо есть неплохая документация) когда наткнулся на эту фичу, хотя это сильно ускоряет и помогает в разработке. И сейчас когда дошли руки решил написать небольшую статью об этом. Возможно опытным программистам она мало чем поможет, они и сами смогут разобраться во всём или же уже давно это юзают, но для всех остальных считаю вполне подойдёт. Итак приступим.

Создание шаблона

Для начала сделаем простой пример, к примеру константу логгера. Заходим в Settings -> Editor -> Live Templates. Здесь есть возможность просмотреть уже готовые группы шаблонов и создать свою — нажав на плюсик в правой части панели. Также можно создать отдельный шаблон, тогда он добавится в группу user. После нажатия у вас снизу появится окошко, в котором нужно ввести аббревиатуру, описания и собственно сам текст шаблона. Также будет предупреждающая надпись "No applicable context" и кнопка Define рядом, кликнув на которую мы увидим список возможных контекстов — HTML, XML, Java, Javascript, CSS и тд. У некоторых есть подпункты, например в Java это возможность использовать шаблон в методе, в комментарии, на уровне класса, где то ещё или везде сразу. Выберем для примера весь пакет Java.

В качестве аббревиатуры напишем log, в качестве теста вот такую вот строку:

private static final Logger LOGGER = Logger.getLogger($CLASS_NAME$.class.getName());

Далее жмём на кнопку которая находится в правой части — Edit variables. В открывшемся окошке видим таблицу с одной записью — CLASS_NAME, которая соответствует переменной которую мы указали в тексте файла в качестве имени класса. У нее есть поля Expression, Default value, Skip if defined. Первое поле это селект в котором нам предлагаются всевозможные значения которые можно подставить. Второе это просто строка в которой мы можем написать что угодно взяв это в кавычки. Ну а третье поле предлагает нам пропустить редактирование переменной если она задана в одном из первых свойств. В нашем случае нам понадобится значение селекта className() из поля Expression. При желании можно выбрать пропуск редактирования. Жмём OK, после Apply и можно проверять. Создаём класс с любым именем, пишем внутри log, нажимает TAB и вуаля — у нас есть логгер у которого к вместо CLASS_NAME имя текущего класса.

Пример:

public class CodeTemplates { private static final Logger LOGGER = Logger.getLogger(CodeTemplates.class.getName());
}

Особенности и возможности:

1. При создании шаблонов есть ключевая переменная $END$ указывающая на то где будет находиться курсор когда вы создадите шаблон (По умолчанию в конце кода шаблона).

System.out.println($END$);

2. Вторая ключевая переменная это $SELECTION$. Если она присутствует в вашем шаблоне, то он будет появляться в меню Surround With(Ctrl+Alt+T). Это нужно если хотите заключить ваш код в обёртку.

System.out.println("$SELECTION$");

Т е допустим у вас есть слово или предложение, например TEST — вы ставите курсор в конец слова, нажимаете Ctrl+Alt+T и среди шаблонов можете выбрать свой, и тогда получится:

System.out.println("TEST");

P.S.: для блока кода или текста, достаточно его сначала выделить.

Чтобы было понятнее приведу пример. 3. Некоторые из расширений в Extentions могут принимать в аргументы значения различных типов, в том числе другие расширения. Обычно имена таблицы и класса совпадают, с различием лишь в том что className становится CLASS_NAME. Возможно многие знакомы с аннотацией JPA Table, в которую можно среди прочего передавать имя таблицы соответствующей данному классу(сущности). Шаблон для создания данной аннотации будет примерно таким:

@Table(name = "$TABLE NAME$")

В Extentions выбираем capitalizeAndUnderscore(String), только вместо String уже сами прописываем className:

capitalizeAndUnderscore(className)

Пример:

@Table(name = "CODE_TEMPLATES")
public class CodeTemplates { ...
}

PS:
В селекте поля Extentions можно прописать и свои значения, как в инпуте, но не вижу в этом смысла, ведь это можно сделать в поле Default value.

Заключение

Надеюсь сегодняшняя статья будет полезна и поможет в ускорении разработки, тем кто ещё не пользовался своими шаблонами.

S.: При желании можно писать свои собственные плагины для IDE, в том числе расширения для шаблонов. P.

Исправления или дополнения приветствуются.

Ссылка на официальную документацию: ТУТ

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть