sergey vasin

The IT blog

Visual Studio Code Snippets

leave a comment »

Visual Studio Code, как и многие другие редакторы кода поддерживает сниппеты — snippets. Сниппеты — это шаблоны, или, другими словами, заготовки кода, которые вы можете использовать при написании скриптов или функций.

Visual Studio Code содержит достаточное количество встроенных сниппетов, от «#endregion» до «workflow sequence». Увидеть их все можно нажав сочетание клавиш Ctrl+Space.

Однако, чтобы вам при этом не пришлось пробираться сквозь имена командлетов и их параметров, лучше это сделать, расположив курсов на отдельной строке.

Несмотря на все многообразие уже определенных сниппетов, мы всегда можем расширить их набор своими собственными заготовками. В Visual Studio Code это делается отдельно для каждого языка. Мы будем создавать сниппеты для PowerShell.

Для этого нам потребуется выбрать пункт меню File, затем Preferences и User Snippets. Далее нам нужно будет выбрать язык. Мы уже решили, что это будет PowerShell. После этого откроется файл powershell.json, в котором мы и будем создавать свои сниппеты.

Их структура определяется следующим образом:

"Имя сниппета": {
	"prefix": "Префикс",
	"body": [
		"Некий код"
	],
	"description": "Описание сниппета"
}

где «Префикс» — это набор символов, на который будет срабатывать предложение использовать сниппет, «Некий код» — это, собственно, тот код, который и будет вставлен вместо префикса, а «Описание сниппета» — это то, что будет отображаться во всплывающем окне вместе с предлагаемым для использования кодом.

if else

Начнем с простого. При написании кода я предпочитаю тип форматирования Allman. Это такой тип, при котором каждая фигурная скобка, как открывающая, так и закрывающая, расположена в отдельной строке. Например, так:

if (something)
{
    do_this
}
else
{
    do_that
}

И хотя подобный подход работает не для всех командлетов (ForEach-Object и Where-Object, к примеру, требуют, чтобы открывающая фигурная скобка была расположена непосредственно за ними), в большинстве случаев он довольно удобен.

Однако встроенный сниппет для if предлагает следующий вариант:

if (condition) {
    
}

То же самое делает и else:

else {
    
}

Чтобы это поправить, нам потребуется определить два новых сниппета: if и else.

Выглядеть они будут так:

"new_if": {
	"prefix": "if",
	"body": [
		"if (${1:condition})",
		"{",
			"\t$0",
		"}"
	],
	"description": "new if"
},

"new_else": {
	"prefix": "else",
	"body": [
		"else",
		"{",
			"\t$0",
		"}",
	],
	"description": "new else"
}

Теперь, при наборе if, нам будут предлагаться два варианта: new_if и if, причем определенный нами будет отображаться первым.

Курсор поначалу будет расположен в скобках условия — ${1:condition}, определив которое и нажав Tab, мы перейдем в блок кода — $0.

В структуре «body» символы $1 — $9 обозначают места расположения курсора и очередность его перемещения при нажатии клавиш Tab или Shift + Tab. Причем любое из этих обозначений может быть использовано в шаблоне несколько раз. Это позволит вам вносить правки в несколько мест одновременно.

$0 обозначает конечное местоположение курсора, то, где он окажется, когда мы нажмем Tab, определив последнее нумерованное расположение. Если $0 отсутствует — курсор перейдет на позицию, непосредственно следующую за шаблоном.

Также мы можем указать значение по умолчанию. В сниппете new_if — это «condition». Особенно удобным при работе со сниппетами является тот факт, что при перемещении курсора по позициям, значение по умолчанию автоматически выделяется, поэтому нам не потребуется каких-либо дополнительных усилий по его изменению.

«\t» в обоих вышеприведенных сниппетах — это символ табуляции.

MessageBox

Теперь давайте определим сниппеты для такого нехарактерного для PowerShell явления, как диалоговые окна. Понятно, что для администраторов вполне хватает командной строки, однако если какие-либо инструменты создаются для пользователей, это вполне может пригодиться.

Для того, чтобы использовать какие-либо формы в PowerShell, сначала нам потребуется загрузить нужную библиотеку. Например, так:

[void][Reflection.Assembly]::Load('System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089')

Чтобы не прописывать эту строку каждый раз, когда мы собираемся использовать формы, мы можем определить ее в качестве сниппета:

"System.Windows.Forms": {
	"prefix": "forms",
	"body":[
		"[void][Reflection.Assembly]::Load('System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089')"
	],
	"description": "Loading System.Windows.Forms"
}

Теперь при наборе «forms», нам будет преложено воспользоваться созданным нами шаблоном.

Далее, нам нужно задать сниппет для статического метода Show типа System.Windows.Forms.MessageBox. Сначала создадим шаблон для более простого варианта, требующего всего два параметра: Text и Caption.

Выглядеть это будет так:

"MessageBox": {
	"prefix": "msgbox",
	"body":[
		"[void][System.Windows.Forms.MessageBox]::Show('${1:Text}', '${2:Title}')"
	],
	"description": "Message Box"
}

Теперь, введя msgbox, мы сможем воспользоваться вышеприведенным шаблоном и указать как текст сообщения, так и заголовок диалогового окна.

[void][System.Windows.Forms.MessageBox]::Show('Text', 'Title')

Следующим давайте зададим сниппет msgbox2 для отображения диалогового окна с возможностью выбора доступных кнопок и его типа, такого, например, как Information, Warning или Error.

Для этого нам понадобится определить еще два параметра: buttons и icon. Первый из них принимает значения типа System.Windows.Forms.MessageBoxButtons, а второй — System.Windows.Forms.MessageBoxIcon. Выглядеть сниппет будет следующим образом:

"MessageBox2": {
	"prefix": "msgbox2",
	"body":[
		"[void][System.Windows.Forms.MessageBox]::Show('${1:Text}', '${2:Title}', [System.Windows.Forms.MessageBoxButtons]::${3:OK}, [System.Windows.Forms.MessageBoxIcon]::${4:Information})"
	],
	"description": "Message Box 2"
}

По умолчанию значением аргумента buttons будет «OK», а аргумента icon — «Information», однако ничто не мешает нам это изменить, перейдя на нужную позицию при помощи клавиши Tab, нажав Del, для того чтобы удалить выделенное значение, и нажав Ctrl + Space. При этом нам будут предложены все имеющиеся варианты значений для определенного типа данных — System.Windows.Forms.MessageBoxButtons или System.Windows.Forms.MessageBoxIcon.

[void][System.Windows.Forms.MessageBox]::Show('Text', 'Title', [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information)

Страницы в социальных сетях:

Twitter: https://twitter.com/vsseth
Facebook: https://fb.com/inpowershell
VKontakte: https://vk.com/inpowershell


Реклама

Written by Сергей Васин

Октябрь 12, 2017 в 11:04

Опубликовано в PowerShell, Visual Studio Code

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s