Дмитpий Hecтepук

Блог о программировании — C#, F#, C++, архитектура, и многое другое

Полезный набор Live Template’ов

9 комментариев

Я уверен, что многие из вас видели огромное количество open-source проектов, которые предлагают наборы сниппетов для Visual Studio. С одной стороны, конечно, подобные проекты – пустая трата времени обычного разработчика, т.к., говоря образно, к вам в монастырь приходит некто со своим уставом и диктует, что для счастливой и вечной жизни вам нужно таки заучить несколько комманд, которые вы потом будете использовать. Согласитесь, не глупо ли?

Но применения у снипетов есть, причем не частные а именно общие. И этот пост – попытка продемонстрировать набор темплейтов, который может пригодиться каждому.

Предыстория

Дело это происходило несколькими годами ранее, когда я еще был наивный и глупый и верил в светлое безкризисное будущее. В то время, мне в голову стукнула идея попробовать как-то расширить механизм сниппетов дабы попробовать попередавать в сниппеты параметры. Поскольку делать это в принципе невозможно (сорри!), в результате я обратился к кодогенерации, замутил проект и даже опубликовал на CodeProject не очень то популярную статью.

Идея была хорошая, но в результате получился трэш. И я бы рад забыть про эту идею не наткнись я, уже в 2010м году, на программу под названием CodeRush. Эта программа – плагин для производительности для Visual Studio – основной своей фичей мнит как раз реализацию удобых темплейтов которые позволяют… ну, по сути дела они делают то же что и обычные сниппеты для студии, но с одним капитальным различием.

В CodeRush используются только стандартные конструкции. Например, шорткаты для создания класса, метода, свойства. Написав c, создается класс. Написав ms, создается метод, который возвращает строку. А написав, например, pl.s, создается свойство типа List<string>.

Все подобные конструкты мы создаем каждый день в нашей работе. Это вещи, которые могут сэкономить массу времени людям которые, например, имея отличные знания C# не очень ориентируются в том как создавать типы на F#. И тут меня осенило. Ведь я, фактически, могу сам создать свой стандартный словарь сокращений для различных .Net-конструктов, выбрав те механизмы и типы, который лично я считаю наиболее удобными. Более того, я могу воспользоваться всей мощью мною любимого Решарпера, дабы иметь доступ к дополнительной, нужной мне информации – например к названию типа, в котором я сейчас нахожусь.

И понеслось…

Стандартный Словарь

Первым делом, мне пришлось выбрать те основные конструкты, которые будут доступны пользователю. Я выбрал следующие:

  • class

  • static class

  • interface

  • struct

  • enum

  • abstract class

  • Тестовый класс (с аттрибутом TestFixture и дефолтным методом с аттрибутом Test)

Что касается начинки класса, то мне понравились следующие элементы:

  • Private field

  • Private static field

  • Private readonly field

  • Public method

  • Test method (то же самое что и public method, но помечен как [Test])

  • Auto-property (другие типы свойств делать не захотелось т.к. это уже реализовано в Решарпере через рефакторинги)

  • Dependency property (то же самое что propdp в студии, только не надо писать лишний раз имя содержащего класса)

Теперь что касается типов. На вкус и цвет, как говориться, товарищей нет, поэтому в плане примитивных ValueType все может и понятно, а вот из reference types пришлось выбирать. В результате получилось вот это:

  • Примитивные типы: bool, char, float, byte, double, int, string, long, uint, Guid, DateTime

  • Более сложные типы: Exception, StringBuilder, List<T>, HashSet<T> (на самом деле не уверен что конкретно этот тип много кто использует), Dictionary<T,U>

Вполне очевидно, что пользователи могут предпочесть другие типы, но я не могу поддержать их все. Один тип, который я решил поддержать отдельно – это IEnumerable<T>. Помните я публиковал небольшой пост о возможных фичах C#5? Так вот, оттуда я вычерпнул идею превратить ~ (тильду) в аналог IEnumerable. На практике, это значит что написав m~s вы получите метод, который возвращает IEnumerable<string>.

Реализация

Первое, что я сделал – это взял типичный шаблон Решарпера и пропустил через XSD.EXE, получив объектное представление. После этого, сделал для каждой концепции массив, и поместил все во вложенные циклы: типы объектов (класс, метод, и т.д.), типы значения, различные вариации вроде массивов или Nullable.

Отдельный код с циклом создал и для дженериков, чтобы был вариант как задать тип руками List<MyType>, так и сделать “шаблоный” тип – например vl.s делает List<string>.

Остальное все дело техники. Создать XML-файл из готовых кусочков совсем несложно, на самом деле. Правда результат получился немаленький – аж 1Мб (на текущий момент) шаблонов, в количестве где-то 1200 штук. И это, понятное дело, еще не все – ведь будут новые идеи, захочется добавлять полезные фичи. Но это как пойдет.

Дайте Мне Скорее!

Скачать все темплейты можно тут. Чтобы их установить, сначала идем в меню ReSharper→Live Templates, потом в открывшемся окне нажимаем кнопочку Import, выбираем XML-файл. И ждем. Долго. Очень долго. Ведь шаблонов “за тыщу”. Ну а потом собственно пользуемся.

Вообщем, шаблон я выложил, но это work in progress, так что если что — пишите комментарии! Спасибо!


P.S. С Новым 2011м Годом! Я на самом деле не склонен подводить итоги, поэтому скажу кратко – я даже не 2010й год отдельно рассматриваю, а полосу 2008-2010, в которой, увы, было очень мало радостей – а точнее, почти не было. И хоть и хочется сказать что “кризис ушел”, на самом деле это, конечно же не так. Но не знаю как вам, а лично мне остается одно: работать, работать, работать.

Реклама

Written by Dmitri

3 января 2011 в 3:41

Опубликовано в .NET, C#, ReSharper

комментариев 9

Subscribe to comments with RSS.

  1. Здравствуйте Дмитрий спасибо за темлэйты,
    только вот не пойму некоторые shortcut повторяются и проблемы при вставке кода например
    p~[ r~[ r~ повторяются по 2 раза.

    Сергей

    3 января 2011 at 15:51

    • Спасибо, пофиксил и обновил файл.

      Dmitri

      3 января 2011 at 21:28

      • nd0 тоже дублируется.

        Наверняка есть и другие, поэтому стоит программно отфильтровать все дубляжи.

        ShakirovRuslan

        4 января 2011 at 13:58

        • Хмм, только что проверил, вроде дублирования больше нет.

          Dmitri

          4 января 2011 at 14:28

      • Не пофиксил. Дубляжей еще полно, если заглянуть в XML. Удачи.

        Андрюха

        11 января 2011 at 11:25

        • Теперь точно все пофикшено :)

          Dmitri

          5 июня 2011 at 13:41

  2. Спасибо!

    Сергей

    4 января 2011 at 10:59

  3. Не вникал, но шорткат p выдает такое:

    public
    {
    typename
    }

    MyProperty
    {
    get;
    set;
    }

    Дмитрий

    8 января 2011 at 15:40


Оставить комментарий

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

Логотип WordPress.com

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

Фотография Twitter

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

Фотография Facebook

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

Google+ photo

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

Connecting to %s

%d такие блоггеры, как: