LINUX.ORG.RU

yasnippet


0

1

Есть шаблон:

// xxx description
$1
$0

Хочется при наличии ввода в позиции $1 иметь наличие первой строки, там, где xxx description, а при отсутствии ввода в поле $1 не иметь строки вообще. Т.е. иметь какой-то триггер, который выполнит лиспокод после анализа ввода в поле $1.

Вот это:

// $1 description
${1:param}
$0

мне не годится, здесь первая строка всегда присутствует и тут простое зеркалирование ввода в поле $1, а мне хочется именно триггер и выполнение кода.

Всё это для коментирования функций, для описания переданных параметров, если функция параметры не принимает, то строки с описанием параметра нет.

// FooBar - does something
// param1 - first parameter
// param2 - second parameter
// result - returned value
var FooBar = function(param1, param2) {
  var result = "";

  return result;
};

вот хочется написать универсальный сниппет, в котором строки

// param1 - first parameter
// param2 - second parameter

подставляются только при наличии ввода в поле сниппета в function([ТУТ]). Как видно, тут ещё и парсинг введённого параметра планируется, чтобы из одного поля ввода получить param1, param2, ... paramN.

Как сделать, может, кто-то уже делал?

★★

придется писать на elisp'е, мне кажется, что я видел в стандартных снипеттах что-то подобное, когда ввод анализировался и производилась генерация кода на его основе...

ott ★★★★★
()
Ответ на: комментарий от ott

Нашёл выход, в трансформации можно написать необходимое.

# -*- mode: snippet -*-
# name: define a function returns a value
# key: foo
# --
// $1 - ${3:description} ${2:$(cond
((> (length yas/text) 0)
    (concat "\n"
            (mapconcat #'(lambda (s)
                       (replace-regexp-in-string "," " " (concat "// " s)))
                       (mapcar #'(lambda (s) (format "%-10s" s)) (split-string yas/text "[, ]+"))
                       ": \n")
            ": "))
(t ""))}
// result    : 
var ${1:name} = function(${2:}) {
  var result;
  $0

  return result;
};

Вот так оно выглядит: http://dl.dropbox.com/u/4255152/yasnippet/yasnippet.swf.html

Reaper ★★
() автор топика
4 марта 2012 г.
Ответ на: комментарий от anonymous

Я не помню, чем записывал видео и конвертировал. Вероятно, писал видео с recordMyDesktop, а чем во флэш перегнал, не помню совсем.

Reaper ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.