"Class Initializer": {
"prefix": "rci",
"body": [
"${1/([^,]+)([,\\s]*|)/attr_reader :$1\n/g}",
"${1/([^,]+)([,\\s]*|)/# @param $1 [...]${2:+\n}/g}",
"def initialize($1)",
"${1/([^,]+)((,\\s*)|)/\t@$1 = $1${2:+\n}/g}",
"end"
],
"description": "Initialize Class"
}
Ключом к тому, чтобы заставить его работать для любого количества аргументов метода, является включение их в такую же группу захвата регулярных выражений .
Затем с установленным глобальным флагом каждая группа захвата вызовет текст замены. Так, например, /attr_reader :$1\n/g
будет срабатывать 3 раза, если у вас есть 3 аргумента метода.
Вы увидите это ${2:+\n}
в преобразованиях выше. Это означает, что если есть группа захвата 2, добавьте новую строку. Регулярное выражение разработано так, что существует только группа захвата 2, если между аргументами есть еще один ,
. Таким образом, окончательный )
после последнего аргумента не будет вызывать еще одну новую строку - поэтому вывод точно соответствует желаемому выводу относительно новых строк (но вы можете легко добавлять или удалять новые строки).
Ваш ввод должен быть вправильная форма:
v1, v2, v3
Вот демоверсия:
Итак, еще раз необходимая форма просто v1 v2 v3
. Между аргументами не должно быть пробела, но тогда вы получите def initialize(v1,v2,v3)
без пробелов.
Нажмите Tab после последнего аргумента для запуска завершения.
Оказывается, фрагменты довольно мощные !!
Дляаналогичный вопрос об использовании нескольких аргументов, см. Фрагмент VSCode: добавьте несколько объектов в конструктор класса