Pull to refresh

Visual Studio Snippets

Reading time3 min
Views19K
Одно время я очень фанател от CodeRush. Он позволял в два-три нажатия клавиши создать свойство у объекта или составить тело цикла. Набирать код институтских лабораторных было одно удовольствие.

Потом вышла 2008 студия с C# 3.0 и там были автоматические свойства. Мне все больше не нравилось, когда CodeRush делал не то, что я хотел. Короткие шоткаты этому способствуют. И в один прекрасный момент я отказался от его использования. У меня больше времени тратилось на борьбу с инструментом, чем если бы я набирал код собственоручно.

Потом я узнал о сниппетах студии. По сути это те же шаблоны кода из CodeRush, только более простые. Есть стандартные вроде for, foreach, prop и exception. Чтобы их раскрыть нужно написать имя шаблона и нажать TAB. Если пользоваться автокомплитом, то можно написать часть имени шаблона, а потом TAB, TAB.

Но самая прелесть в том, что можно писать свои шаблоны. Вручную, правда, этого лучше не делать. Шаблон хранится в XML и редактировать его вручную тяжко.

Однако есть дополнение к студии, позволяющее создавать и редактировать шаблоны —
http://www.codeplex.com/SnippetDesigner. Редактирование выглядит следующим образом:



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

Чтобы подсоединить новый сниппет к студии, нужно его создать. Делается это либо через контекстное меню (для выделенного кода), либо копированием существующего файла сниппета. Где лежат шаблоны можно посмотреть в Tools\Code Snippets Manager. Пользовательские шаблоны лежат по умолчанию в \Documents\Visual Studio 2008\Code Snippets\. Если создавать шаблон через копирование файла, то нужно у него поменять Shortcut свойство в XML. То ли студия, то ли SnippetDesigner кеширует сниппеты и при сохранении сниппета с тем же шоткатом можно потерять изменения.

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

Свойство с уведомлением:


/// <summary>
/// $comment$
/// </summary>
/// <remarks>
/// Уведомление об изменении
/// </remarks>
private $type$ m_$property$;

/// <summary>
/// $comment$
/// </summary>
public $type$ $property$
{
    get
    {
        return m_$property$;
    }
    set
    {
        m_$property$ = value;
        OnPropertyChanged( "$property$" );
    }
}


Свойство с ленивой инициализацией:


/// <summary>
/// $comment$
/// </summary>
/// <remarks>
/// Ленивая инициализация
/// </remarks>
private $type$ m_$property$;

/// <summary>
/// $comment$
/// </summary>
public $type$ $property$
{
    get
    {
        if( m_$property$ == null )
        {
            m_$property$ = null;
        }
        
        return m_$property$;
    }
}


MS Prism команда:


#region Command - $name$

/// <summary>
/// Команда $comment$
/// </summary>
public DelegateCommand<$type$> $name$Command { get; private set; }

/// <summary>
/// Обработчик команды $comment$
/// </summary>
private void $name$( $type$ parameter )
{
    // TODO: Инициализировать команду в конструкторе
    // $name$Command = new DelegateCommand<$type$>( $name$, Can$name$ );
    
    // TODO: Добавить по необходимости Shortcuts, ReturnKeyAssistants
}

/// <summary>
/// Критерий выполнимости для команды $comment$
/// </summary>
/// <returns>true если команде разрешено выполняться</returns>
private bool Can$name$( $type$ parameter )
{
    // TODO: Добавить обработчики ошибок для входных данных
    //return Errors.Count == 0;

    return true;
}

#endregion
Tags:
Hubs:
Total votes 20: ↑13 and ↓7+6
Comments10

Articles