Kan ik een yasnippet maken met een herhalende lijst met variabele lengten

Javascript Angular heeft een eigenaardig patroon voor het maken van controllers die er als volgt uitziet:

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

Het '$ scope', 'foo', 'bar' ding wordt herhaald als de parameterlijst in de functie binnen de array met vierkante haken.

Ik dacht dat ik dit minder foutgevoelig zou kunnen maken door een yasnippet te schrijven. Het ziet er zo uit:

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

Dit werkt prima, maar alleen als er één parameter is (in de positie $ 3), zoals of ik $ scope gebruik. Als ik er meer dan één wil gebruiken, valt het stuk.

Is er een manier om het fragment te schrijven zodat het een door komma's gescheiden lijst van aangehaalde reeksen zal maken en een door komma's gescheiden lijst van niet-aangehaalde reeksen ergens anders in het fragment zal herhalen?

1

1 antwoord

Ik denk dat zoiets als dit zou kunnen werken:

# -*- 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;
}])

En in actie:

enter image description here

2
toegevoegd