Poznámka: články jsou již mnoho let staré, doba se posunula, mnoho věcí v nich doporučovaných je již dnes překonané - berte s rezervou!


ReSharper - velice užitečný Visual Studio Add-In

Download resharperu Pokud používáte některou z ne-Express verzí Visual Studia 2005 nebo 2008, můžete si IDE rozšiřovat o Add-Iny třetích stran. Přiznám se, že jsem tuto možnost nikdy příliš nevyužil. Svůj první add-in jsem si nainstaloval před nedávnem - je to JetBrains ReSharper (R#), který o sobě prohlašuje, že je tím nejchytřejším add-inem ze všech. Tak se na to podíváme - opravdu toho umí hodně.

Základní přehled funkcí

ReSharper je dost velký balík, pokusím se funkce rozdělit do několika kategorií a budu psát hlavně o těch, se kterými jsem se už stihnul seznámit:

  • Generování kódu
  • Refactoring
  • Navigace v kódu
  • Analýza kódu a hledání chyb
menu generate

Generování kódu

S generováním kódu se snaží již pomáhat samotné Visual Studio, ale ReSharper předvádí, že celou věc lze dotáhnout mnohem dál. Visual Studio umožňuje vygenerovat kostry funkcí z interface nebo abstraktní třídy, dobře také generuje kód při předefinování metod předků.


Možnosti generování ReSharperu vyvoláte zkratkou Alt-Ins. Jsou to:

Constructor - moje oblíbená featura, spustí wizard generování konstruktoru - v něm vám nabídne který konstruktor předka chcete použít a jaké fieldy v konstruktoru nastavit. Vytváření různých přetížení konstruktoru je tak otázka několika vteřin.

Další hodně užitečná funkce je delegování - opět v několika sekundách vygenerujete propertu, která svou hodnotu deleguje na nějaký vnitřní objekt - třeba takto

private String internalString; public int Length { get { return internalString.Length; } }

Podobným způsobem můžete generovat Property z již existujících fieldů.

Implementování metod interfacu a základní třídy je opět silnější, než ve Visual Studiu. Pokud totiž interface předepisuje nějaké property, Visual Studio vám vygeneruje jen kostru property s prázdným tělem. Resharper umožní automaticky vytvořit property s backing field nebo vytvořit Auto-property (novinka v C# 3.0).

Templates

Templates jsou kapitolou samy pro sebe. Nabízejí se vám v intellisensu a jsou to jakási makra, pomocí kterých můžete vygenerovat úseky zdrojového kódu. Součástí je široká sada obecných šablon a šikovný tool na generování vlastních. Za příklad bych uvedl foreach cyklus - nedovedu si představit pohodlnější způsob psaní foreach cyklu, než s ReSharperem - nejenže vám ReSharper vytvoří kostru cyklu, ale také nejprve nabídne kolekce, přes které lze iterovat (přičemž nabízí vždy ty nejbližší, takže se většinou skutečně trefí). Až vyberete požadovanou kolekci, sám odvodí typ prvků a vytvoří iterační proměnnou, pro kterou vám přednabídne i vhodný název. Takovýto foreach cyklus tedy vygenerujete 4 stisky klávesy Tab:

private void dummy(IList < string > list) { foreach ( string s in list) { } }

Pokud jen trochu často používáte nějaké často se opakující příkazy a skupiny příkazů, určitě se vyplatí vytvořit pro ně šablonu. Sám už jich mám několik :o).

Refactoring

kontextové upravy

Hned první věcí, kterou si po instalaci ReSharperu a otevření souboru všimnete, budou malé žárovky v levé části editoru. Ty naznačují, že má pro vás ReSharper nějaký návrh. Zkratkou Alt-Enter otevřete kontextové menu a v něm si můžete vybrat, co vám ReSharper nabízí. Různých příkazů jsou desítky - můžete importovat správný namespace, pokud jste použili typ, který v aktuálním namespacu není dostupný, změnit viditelnost metody nebo property, oddělit deklaraci a přiřazení proměnné (z int x = 1; vytvoří int x; x = 1) , přesunout deklaraci o blok výš nebo níž... prostě mraky nejrůznějších akcí, na mnoho z nich si zvyknete tak, že je budete používat naprosto automaticky.

Kromě "žárovkového" refactoringu je možné refactorovat podobným způsobem, jako ve Visual Studiu - tedy přejmenovávat, přesouvat, vytýkat deklarace do interfaců, měnit pořadí parametrů atd. Třeba přesouvání bloku kódu výš nebo níž pomocí zkratky Alt+Shift+Up/Down je parádní funkce.

Navigace v kódu

Možnosti navigace v kódu ve mne od jejich objevení vzbuzují téměř extatické nadšení:o). Solution, na které pracují, už je poměrně naboptnalá - cca 125 projektů, v každém projektu x souborů. Pokud se člověk potřebuje někam dostat, musí hledat ve stromu v Solution Exploreru, rozbalovat podstromy - typicky myší a to zdržuje. S ReSharperem to již nutné není. Je tu totiž několik různých možností, jak se v kódu pohybovat.

Základní je "Navigate from Here to" menu, které vyvoláte zkratkou Ctrl + Shift + G - v něm máte na výběr, kam se chcete z aktuálního místa dostat - můžete tak skočit do předka vaší třídy nebo naopak potomka, skočit na místo, kde je daný prvek použit případně najít přetížení. Především přeskakování mezi Base a Inheritor je vynikající - třeba v naší Solution je mnoho serverových objektů které jsou na klientu dostupné pouze ve formě itnerfaců. Takto se dá snadno přecházet mezi interfacem a odpovídající implementací - tuto feature používám neustále a bez ReSharperu byla takováto navigace pěkná otrava.

Krom menu "Navigate from Here" je několik dalších možností. Při stisku Ctrl + F12 se objeví menu "Enter member name" pomocí kterého se rychle dostanete na propertu nebo metodu třídy, kterou máte právě otevřenou. Pokud chcete otevřít jinou třídu, stisknete Ctrl + N a otevře se vám podobné menu, tentokrát ale s dostupnými typy. Po vybrání typu se vám pak otevře odpovídající soubor s typem. Posledním z podobných menu je menu pro otevření požadovaného souboru ve vaší Solution, které vyvoláte zkratkou Ctrl + Shift + N, popř zkratkou Ctrl + E, která vám nabídne pouze ty soubory, které jste nedávno editovali. Zkratka Shift + Alt + L vám zase okamžitě najde právě editovaný soubor v Solution Exploreru

 


Ukázka funkce Go To Type


Ukázka funkce Go To File


Ukázka funkce Go To Member

Funkce navigace v kódu jsou natolik intuitivní, že už jen samy o sobě by mě přesvědčily k používání add-inu.

Analýza kódu a hledání chyb

Podobně jako vás původní editor Visual Studia upozorňuje na chyby v kódu (typicky červenou vlnovkou), upozorňuje vás i ReSharper. U mnoha chyba ale navíc nabízí i rychlé řešení - pokud jste použili typ, který není importován, stiskem Alt-Enter vám do souboru přidá odpovídající klauzuli "using". Když přiřadíte špatný typ, umožní nabídne vám přetypování - a tady si můžete vybrat jak přetypování přiřazeného typu na cílový, tak i možnost změnit definici proměnné, do které přiřazujete, na přiřazovaný typ. Když použijete metodu, která neexistuje, ničemu to nevadí - metoda je zobrazena červeně, přesto jakoby existovala. Až se rozhodnete, můžete pomocí ReSharperu neexistující metodu vytvořit. Stejně tak když zadáte parametry metody jinak než v deklaraci, nabídne vám ReSharper jak změnu ve vašem volání, tak také vytvoření nového overloadu volané metody - takového, který bude odpovídat vašemu volání.

Nakonec je tu ještě globální funkce Solution Wide Analysis, která hledá chyby ve všech souborech solution a umožňuje vám chyby rychle najít a opravit.

Další featury

Určitě bych rád upozornil na Find Usages dialog, který je mnohem přehlednější, než dialog Find All References ve Visual Studiu.

ReSharper také umí spolupracovat s knihovnou NUnit a spouštět vámi deklarované testy.

Další hezkou funkcí je kontextové menu Surround with, které je vylepšením podobného menu z Visual Studia.

Download resharperu

Určitě jsem neupozornil na všechno, co ReSharper umí - proto vám doporučuji prohlédnout si přehled funkcí na adrese http://www.jetbrains.com/resharper/features/index.html

Nejlépe ale uděláte, když si ReSharper sami vyzkoušíte - a to tak, že si nainstalujete trial verzi 4.1. Lze instalovat jak do Visual Studia 2005 tak do Visual Studia 2008.

Každá sranda něco stojí...

Nic není černobílé a ani ReSharper není dokonalý. Především je to poměrně velký balík funkcí a vy instalujete buď všechno, nebo nic - chybí mi nějaká modularita. Funkcí je mnoho a vy za jejich používání platíte výkonem - nic naplat, přítomnost ReSharperu je poznat na rychlosti editoru Visual Studia. Proto doufám, že se autorům podaří výkon add-inu ještě vyladit. I tak ale podle mě to, co člověk používáním ReSharperu získá, předčí problémy s výkonem.

Je také pár věcí, které mi na ReSharperu přímo vadí

  • ReSharper se neustále snaží vylepšovat a různě optimalizovat váš kód - proti tomu žádná. Nechápu ale, proč takto ale hledá problémy i v kódu, který je generován designery formulářů, datasetů a dalších - UPDATE - tento problém byl již vyřešen.
  • Intellisense ReSharperu neotvírá enumy tam, kde se enum přiřazuje, s enumem se porovnává nebo se volá funkce, jejímž parametrem je enum. Takto se chovalo Visual Studio a velice mi tato funkce chybí. Autoři doporučují místo toho používat Smart type completion (nabízí vám jen položky vhodného typu), které je ale o dost pomalejší a musí se otvírat explicitně.
  • Generování propert umísťuje vygenerovaný kód způsobem, který jsem ještě úplně neprohlédl; často vygenerovaný kód skončí jinde, než tam, kde máte kurzor.

Znáte-li další užitečné add-iny, budu rád, když mě upozorníte v komentářích.

Update 17. 11. 2008 - makra On/Off

Ve větších projektech člověk občas silně pocítí zpomalení způsobené Resharperem. Proto se hodí sem tam ho vypnout a pro to používám dvě následující makra namapovaná na tlačítka v toolbaru:

 

1 Public Module Resharper 2 Public Sub DisableReSharper() 3 For Each addIn In DTE.AddIns 4 If (addIn.ProgID = "ReSharper") Then 5 addIn.Connected = False 6 Exit Sub 7 End If 8 Next 9 End Sub 10 11 Public Sub EnableResharper() 12 For Each addIn In DTE.AddIns 13 If (addIn.ProgID = "ReSharper") Then 14 addIn.Connected = True 15 Exit Sub 16 End If 17 Next 18 End Sub 19 20 End Module
 
Vložit komentář:
 

 



 

 

Nepoužívejte žádné html ani texy značky, odřádkování se zachová. Pokud uvádíte zdrojový kód, můžete ho vložit mezi značky
<syntax jazyk="PHP">...</syntax>,
bude potom zformátován. Jako atribut můžete uvést PHP, C#, HTML, CSS a mnoho dalších.


opiste cislo Opište číslo:

 

27. 4. 2008 16:19:52
[1] (Lada (vladimir.dedek(at)starec.eu)) www
placeny odpovědět
Ahoj, diky za clanek, urcite se na to casem mrknu. Jenom je skoda, ze je to placene. Na jejich strankach jsem objevil, ze pro studenty je to free, ale kdybych to chtel treba doporucit kolegum v praci, tak je to na nic, kdyz to neni free :-( Skoda.
27. 4. 2008 16:44:20
[2] (Lada (vladimir.dedek(at)starec.eu)) www
Mouse Gestures pro VS odpovědět
Jeste jsem nedavno narazil na zajimavy add-in: Mouse gestures do VS. Sam pouzivam mouse gestures ve FF a ve VS se taky hodi ;-)
odkaz: http://www.codeplex.com/mousegesturesvs/