Project Description
Code Snippet Editor fot MS Visual Studio 2005 and 2008 with using XML

http://rudisweb.qsh.cz - RudisBlog: my notes

V rámci soutěže se tato práce umístila na hezkém 3.místě.

Zadání soutěžní úlohy:

Visual Studio .NET podporuje vkládání tzv. Code Snippets. Jedná se o možnost rychlého používání často opakujících se kousků kódu. Pokud například napíšete slovo for a stisknete tabulátor, Visual Studio vám doplní základní strukturu For cyklu. Takovýchto snippetů je nepřeberné množství, nemusí to být jenom syntaktické konstrukce jazyka, ale patří sem i komplexnější kusy kódu, například připojení k databázi a spuštění SQL příkazu, stažení souboru z webu atd. Jejich kompletní sadu si můžete prohlédnout, pokud ve Visual Studiu podržíte klávesu ctrl a zmáčknete k a x.

Code Snippet může obsahovat tzv. placeholdery. Placeholder je místo, na které můžete dosadit nějakou vlastní hodnotu, na obrázku jsou vyznačeny zeleně. V praxi to vypadá tak, že napíšete příkladně ve VB.NET slovo property a stisknete tabulátor. Objeví se kód, který je na obrázku, a modře se zvýrazní první placeholder. Tam napíšete název privátní proměnné a tabulátorem se přepnete na další placeholder. Název privátní proměnné se doplní i do placeholderů v sekcích Get a Set, protože na nich mají být stejné hodnoty. Stejně tak i placeholder s datovým typem String je ve snippetu víckrát, když ho tedy změníme na jednom místě, změní se všude.

Obrovskou výhodou je, že kromě té hromady vestavěných code snippetů si můžeme sami nadefinovat vlastní. Snippety jsou popsány v souborech s příponou .snippet a uložené ve složce Dokumenty\Visual Studio verze\Code Snippets\jazyk\My Code Snippets, k popisu snippetu se používá formát XML. Vaším úkolem bude napsat program, v němž bude možné vlastní snippety vytvářet a upravovat.

Požadované funkce

  • Aplikace musí podporovat jak Visual Studio 2005, tak i 2008. Code snippety pro příslušné verze jsou uloženy ve složkách Dokumenty\Visual Studio 2005\... resp. Dokumenty\Visual Studio 2008\.... Program by měl umět přidávat a upravovat Code Snippety pro programovací jazyk Visual Basic .NET a C#.
  • Aplikace musí umět vytvořit nový Code Snippet. Pokud uživatel v okně kódu aplikace někam položí kurzor a klikne na tlačítko Vložit placeholder, na daném místě se do kódu vloží řetězec $Placeholder1$, při dalším kliknutí $Placeholder2$ atd. Každému placeholderu půjde určit výchozí hodnota, která tam má být předvyplněna. Pokud uživatel označí nějaký řetězec a udělá z něj placeholder, měl by se onen placeholder vytvořit na všech místech, kde se označený řetězec vyskytoval. Pokud tedy do okna kódu napíšu deklaraci z obrázku nahoře, označím slovo String a dám vytvořit placeholder, místo všech výskytů slova String se vytvoří placeholder $Placeholder1$.
  • Každému Code Snippetu musí jít nastavit název, jméno autora, nějaký bližší popis a zkratka (např. property), po jejímž napsání ve Visual Studiu se snippet vloží. Dále je možné pro každý snippet zadat několik namespaces, pro něž se při vložení ve Visual Studiu automaticky vygenerují v aktuálním souboru klauzule Imports ve VB.NET či using v C#, pokud je to potřeba.

Každý placeholder je popsán v příslušné sekci Literal. ID je hodnota, která je uvedena v kódu mezi znaky $, v našem případě bude například Placeholder1, Placeholder2 atd. Elementy Type, Tooltip a Function nás nebudou zajímat, důležitý je element DefaultValue, který bude obsahovat hodnotu, jež se do placeholderu předvyplní automaticky při vložení snippetu.

Pak už následuje sekce Code. Atribut Language určuje programovací jazyk, v našem případě uvažujeme hodnoty VB nebo CSharp. Atribut Kind určuje místo, kde se snippet bude používat. To by mělo jít také v aplikaci zvolit, možné hodnoty jsou tři - type decl (Deklarace tříd a typů), method decl (Deklarace funkcí a vlastností) a method body (Kód uvnitř metody). Atribut Delimeter určuje znak, kterým jsou placeholdery ohraničeny. U nových snippetů jej bude aplikace ukládat vždy jako $, načíst ale musí umět i snippet, který má delimeter jiný! Při ukládání snippetu s jiným oddělovačem může nechat ten původní, nebo ho zkonvertovat na $.

Uvnitř elementu Code je pak samotný kód snippetu (v konstrukci CDATA), to je celé. Doporučuji stáhnout si aplikaci Visual Studio Code Snippet Editor a použít ji jako inspiraci co se týče generovaného kódu. Upozorňuji, že tato aplikace má poměrně dost nedostatků, kterými se raději neinspirujte. Samotné snippety ale vytváří korektně.

Abyste získali plný počet bodů, je nutné, aby aplikace uměla všechny funkce popsané v zadání. Pokud toho bude umět více, můžete získat nějaké bonusové body. Kreativitě se meze nekladou. Snažte se, aby aplikace byla uživatelsky přívětivá a její ovládání intuitivní, pamatujte, že lepší je funkční aplikace se standardním systémovým vzhledem komponent, než aplikace, která podporuje vlastní skiny a cool efekty, ale hlavní funkce nemá dotažené do konce.

Stránky soutěže

http://soutez.vbnet.cz

Moje poznámky a další soutěžní úlohy

http://rudisweb.qsh.cz

Last edited Feb 22, 2009 at 3:22 PM by Rudis, version 6