SnippetW tym wpisie opiszę podstawy tworzenia własnego snippet-u (skrawka) w Visual Studio 2010.

Visual Studio ma już pewną listę gotowych snippetów z których warto skorzystać jednak wciąż nic nie stoi na przeszkodzie ,aby stworzyć własne dostosowane do  określonych potrzeb.

Jest to zapewne lepsze rozwiązanie niż kopiowanie i wklejanie składni kodu z naszego notatnika bądź innego źródła.

Untitled

Funkcjonalność Snippet-ów w Visual Studio jest następująca.  Pisząc kod wpisujemy skrót snippet-u lub jego pełną nazwę. Później gdy dany snippet został wybrany wciskamy klawisz tab.

Lista skrótów jest następująca:

  • #if – tworzy dyrektywę wokół zaznaczonego kodu #if i #endif.
  • #region – tworzy dyrektywę wokół zaznaczonego kodu  #region i #endregion
  • ~ – Tworzy destruktor obecnej klasy
  • attribute – Tworzy deklaracje klasy która dziedziczy po Attribute
  • checked – Tworzy block kodu checked.
  • class - Creates a class declaration.
  • ctor– Tworzy konstruktor danej klasy
  • cw – Tworzy wywołanie metody WriteLine
  • do – Tworzy pętle do while
  • else– Tworzy blok else
  • enum – Tworzy deklaracje typu wyliczeniowego
  • equals – Tworzy metoda Equals, która jest przeciążona
  • exception -  Tworzy deklarację klasy, która dziedziczy po Exception
  •  for –Tworzy pętle for.
  • foreach– Tworzy pętle foreach.
  • forr – Tworzy pętle for, która  zawiera deklarację zmiennej.
  • if – Tworzy blok if.
  • indexer– Tworzy deklarację indeksera
  • interface – Tworzy deklarację interfejsu.
  • invoke –Tworzy kod, który wyzwala zdarzenia
  • iterator –Tworzy blok interacyjny
  • iterindex– Tworzy nazywany interator wraz z parą indekerów używanych przez klasę wbudowaną.
  • lock– Tworzy block kodu lock
  • mbox – Tworzy wezwanie metody System.Windows.Forms.MessageBox.Show.
  • namespace – Tworzy deklarację przestrzeni nazw
  • prop – Tworzy właściwość oraz pole prywatne wspomagające.
  • propg – Tworzy właściwość tylko z get
  • sim – Tworzy statyczną metodę Main
  • struct– Tworzy deklarację struktury 
  • switch – Tworzy block switch
  • try– Tworzy blok try-catch
  • tryf – Tworzy blok try-finnaly
  • unchecked – Tworzy block kodu unchecked
  • unsafe – Tworzy block kodu unsafe
  • using – Tworzy dyrektywę using
  • while – Tworzy pętle while

Warto pamiętać ,że snippety nie ograniczają się do kodu w C# przykładowo istnieją pomocnicze  snippety dla kodu strony ASP.NET.

Przejdź do tworzenie własny snippet-ów.

Prosty Snippet

Snippet to tak naprawdę plik XML w odpowiednim formacie i zawierający odpowiednie elementy. IDE Visual Studio dynamicznie je odczytywane za każdym razem gdy uruchamiamy intellisenc pisząc kod.

Pisanie pliku XML jest bardzo twórco błędne.

Na szczęście istnieje projekt OpenSource “Snippet Designer”, który jest dostępny w rozszerzeniach (Extension Menager)  w Visual Studio.

image

Alternatywnie dodatek można pobrać bezpośrednio ze strony codeplex:

 http://snippetdesigner.codeplex.com/

Mając zainstalowany dodatek snippetdesinger możemy przejść do tworzenia snippetu. Poniższy kod przerobimy na snippet.

public int Add(int a, int b)
{
    return a + b;
}

Zaznacz wybrany kod, który chcesz przerobić na snippet. Kliknij prawym przyciskiem myszki i wybierz z menu “Export as Snippet”.

image

Stworzysz w ten sposób nowy plik o rozszerzeniu .snippet.

Teraz w oknie edycji przerób swój kod tak aby był on elastyczny miał on sens do ponownego użytkowania w kodzie.

public $type3$ Add($type1$ $arg1$,$type2$ $arg2$)
{
    return $arg1$ + $arg2$;
}

Kod zmodyfikowałem w ten sposób. Używając znak dolara na początku i na końcu danej nazwy zadeklarowałem dynamiczny napis, który będzie mógł być później uzupełniony i wyedytowany.

image

Oprócz tego trzeba uzupełnić właściwości swojego snippetu ponieważ w przeciwny wypadku nie będzie można z niego skorzystać.

image

Najważniejsze parametry snippetu to Shortcut i Keywords.

Shortcut decyduje o nazwie sinppetu w Intellisense Visual Studio 2010. Keywords określa słowa kluczowe po jakich będzie można się odwołać do snippetu.

image

Swój gotowy snippet zapisz w folderze Visual Studio 2010/CodeSnippets/$twojfolder. W tym folderze będziesz umieszczał wszystkie swoje snippety.

Aby użyć swojego snippetu trzeba jeszcze wskazać $twojfolder w Visual Studio  ,aby to zrobić wybierz z meni głównego Tools –> Code Snippets Manager…

image

Wybierz język dla którego ma być dodany snippet. Później za pomocą przycisku add dodajesz swój folder. Mój folder nazywał się “DemoSnippets” i jak widzisz na obrazku poniżej jest on już dodany.

image

W przypadku  zapisu snippetu w innym miejscu możesz skorzystać z opcji import.

Nie musisz robić tego za każdym razem. Teraz twój folder ze snippetsami będzie dynamicznie skanowany przez Visual Studio więc aby dodać nowy snippet wystarczy go dołączyć do tego folderu.

ADDSNIPPET

Uruchom pierwszą lepszą aplikację i przetestuj swój snippet.

Prosty Snippet - generyczny

Jako bonus pokaże jak zadeklarować snippet, który zawiera parametry generyczne.

public static List<int> SumThis(List<int> a, List<int> b)
{
    for (int i = 0; i < a.Count; i++)
    {
        a[i] = a[i] + b.ElementAtOrDefault(i);
    }

    return a;
}

Oto metoda SumThis która dodaje elementy obu list po czym zwraca rezultat sumowania elementów. Naszym celem jest stworzenie uniwersalnego snippetu, który skróci pisanie takie metody ponownie.

public static $Generic$<$type1$> SumThis($Generic$<$type1$> a, $Generic$<$type1$> b)
{
    for (int i = 0; i < a.Count; i++)
    {
         a[i] = a[i] + b.ElementAtOrDefault(i);
    }

    return a;
}

Jak widać nic nie stoi na przeszkodzie aby dynamicznie deklarować napis typu kolekcji generycznej jak i jego   elementów.

image

Nie zapominamy o uzupełnieniu właściwości snippetu.

image

Zapisujemy snippet w naszym folderze i już możemy się nim cieszyć.

snippet genericGIF