繰り返す可変長リストを使用してyasnippetを作成することはできますか

Javascript Angularには、次のようなコントローラを作成するための特殊なパターンがあります。

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

'$ scope'、 'foo'、 'bar' は角括弧内の関数内のパラメータリストとして繰り返されます。

私は、ヤスニッペットを書くことでこれをエラーが起こりにくいものにすることができると思った。これは次のようになります。

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

これはうまく動作しますが、 $ scope だけを使用している場合のように、$ 3の位置に1つのパラメータがある場合に限ります。私が複数のものを使用したいのであれば、それは壊れます。

スニペットを書くにはいくつかの方法があるので、カンマで区切られた文字列のリストを作成し、スニペット内の別の場所に引用符で囲まれていない文字列をコンマで区切ったリストを繰り返します。

1
追加された
ビュー: 3

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
追加された