Динамический YASnippet, вставка имени метода и аргументов
Как можно получить доступ к имени метода (и его аргументам) при вставке YASnippet в блок кода Java (или JavaScript)?
Цель состоит в том, чтобы иметь возможность расширяться
logm
в (например):
log("notify() called with: " + "context = [" + context + "]");
если вставлено в тело функции:
public void notify(final EventHandlerContext context) {
....
}
(Такой живой шаблон существует в IntelliJ IDEA.)
1 ответ
Вы можете оценить произвольный код LISP во фрагменте. Таким образом, если у вас есть функция для получения имени метода / аргументов, ее можно вызвать из кода фрагмента. Например, вот быстрая попытка получить имя метода - вы могли бы найти лучшую функцию где-нибудь в cc-cmds
или же eclim
библиотеки.
(defun java-method-name ()
(save-excursion
(c-beginning-of-defun)
(when (re-search-forward "\\([A-Za-z]+\\)(")
(match-string 1))))
отрывок
# -*- mode: snippet -*-
# name: logm
# key: logm
# --
log("`(java-method-name)`() called with: " + ${1:etc:..})