Динамический 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:..})
Другие вопросы по тегам