Чи можу я створити yasnippet зі списком повторюваної змінної довжини

Javascript Angular має своєрідний зразок для створення контролерів, які виглядають так:

myApp.controller('myController', ['$scope', 'foo', 'bar', 
                 function($scope, foo, bar) {
                     //do stuff...
                 }]);

Тема '$ scope', 'foo', 'bar' повторюється як список параметрів у функції в масиві квадратних дужок.

Я думав, що можу зробити це менш схильним до помилок, написавши yasnippet. Це виглядає так:

# -*- mode: snippet -*-
# name: angctl
# key: angctl
# --
$1.controller('$2', ['$3', function($3) {
$0;
}]);

Це працює нормально, але тільки якщо є один параметр (у позиції $ 3), як якщо б я використовував $ scope . Якщо я хочу використовувати більше одного, він розпадається.

Чи є спосіб написання фрагмента, щоб він створив список котированих рядків, розділених комами, і повторив список котированих рядків, котируваних комами, в іншому місці фрагмента?

1

1 Відповіді

Думаю, щось подібне може працювати:

# -*- mode: snippet -*-
# name: angctl
# key: angctl
# --
$1.controller('$2', [${3:$(mapconcat (lambda (x) (format "'%s'" x))
                                     (split-string yas-text "," t "[ \t]") ", ")}, function($3) {
$0;
}])

І в дії:

enter image description here

2
додано