Archive

Posts Tagged ‘resharper’

Me, Myself and ReSharper #5: Move to Resource

July 22nd, 2011 No comments

Neue Anforderung: die Applikation muss mehrsprachig sein. Kein Problem oder?

Natürlich nicht – ausser die Stunden monotoner Arbeit um all die Strings in Resource-Files zu verschieben. Moment – monoton, verschieben – das könnte was für meinen Freund ReSharper sein!

Also mal [CTRL]+[SHIFT]+R drücken und schauen was er mir da so anbietet:

Refactor This

Perfekt!

Hier lassen sich die einzelnen Werte abfüllen und mit Next werden diese dann in das ausgewählte Resource-File verschoben und der Code entsprechend angepasst.

Und es kommt noch besser! ReSharper kann auch noch den weiteren Code nach demselben Text durchsuchen und diesen Code dann ebenfalls entsprechend anpassen:

Me, Myself and ReSharper #4: Move method

September 7th, 2010 No comments

Immer wieder hört man sowas wie: “was, ich kann mit ReSharper nicht mal eine Methode verschieben”?

Die Antwort: Doch, kann er natürlich mit links, aber ganz ohne Köpfchen gehts dann doch nicht.

Das Problem…

… liegt eigentlich auf der Hand. Eine Klassenmethode hat in der Regel Abhängigkeiten zu Membern der Klasse in der sie sich befindet. Wie soll nun ReSharper mit diesen Abhängigkeiten umgehen? Zum Glück macht er das nicht irgendwie, sondern erwartet da etwas Vorarbeit vom Entwickler.

Die Lösung…

… liegt meist nahe, wenn man sich das Problem mal klar gemacht hat – so auch hier. Es gilt also, diese Abhängigkeiten aufzulösen – was bei statischen Methoden der Fall ist.

Als einfaches Beispiel nachfolgende Methode,  welche in die Klasse C verschoben werden soll:

public int Compute()
{
    int result = _b.Read();
    return result;
}

Hier gibt es eine Abhängigkeit auf _b. Um diese Abhängigkeit aufzulösen, übergibt man sie als Parameter an die Methode. Und da eilt ReSharper natürlich bereits mit einem Helferlein herbei:

resharper_introduceparameter

public int Compute(B b)
{
     int result = b.Read();
     return result;
}

Damit hat die Methode keine direkten Abhängigkeiten mehr zur Klasse, was es einem erlaubt, diese auch als statisch zu deklarieren.

resharper_makestatic

Die beiden Schritte könnte man in diesem Fall sogar in einem Rutsch tun. Der Dialog von “Make Static…” bietet eine Option, die Abhängigkeit _b als Parameter zu definieren:

resharper_makestatic2[6]

Je nach Komplexität der Methode, muss man jedoch doch auf die obere, zweistufige Methode zurückgreifen.

Und ist die Methode dann erstmal statisch, verweigert ReSharper auch die Move-Funktion nicht mehr:

resharper_movemethod

Me, Myself and ReSharper #3: Color Identifiers

April 5th, 2010 No comments

Die Code Inspections von ReSharper bieten die Option “Color Identifiers” – quasi Schminke für den Code. Die Vorher-Nachher-Ansicht zeigt die Unterschiede:

Vorher-Nachher

Die entsprechende Option kann in den ReSharper-Optionen aktiviert werden:

ReSharper Optionen

Tags: ,

Me, Myself and ReSharper #2: Live Templates

March 25th, 2009 No comments

Das Konzept der Live Templates ist dem der Visual Studio Code Snippets ähnlich. Live Templates ermöglichen es also, beliebige Code-Fragmente als Template zu hinterlegen, so dass diese einfach und schnell im Code wiederverwendet werden können.

Der Resharper bringt hier schon einige von Haus aus mit:

Resharper Predefined Livetemplates

Da gibt es solche darunter, die einem einfach etwas Tipparbeit sparen (aus “thr” resultiert “throw new “) und andere, die etwas aufwändigere Konstruktur kreieren, so entsteht aus “itdic” eine Iteration über ein Dictionary:
Livetemplate itdic

Dabei sind die grün bzw. blau hinterlegten Bezeichnungen Platzhalter, welche mit TAB durchsprungen werden können – so hat man das eingefügt Snippet innert kürze für die jeweilige Situation angepasst. Resharper probiert bei der Wahl der Platzhalter jeweils auch herauszufinden, was man tun möchte. So leitet er aus meiner vorgängigen Initialisierung des dic-Dictionaries automatisch ab, dass ich wahrscheinlich darüber iterieren möchte, und dass dieses Dictionary einen Key vom Typ Integer und den Wert als String enthält.

Wer sieht den Fehler? Genau, die Iterationsvariable ist vom Typ DictionaryEntry statt KeyValuePair und die Casts im Body sind überflüssig. Das heisst, dieses Live Template ist für die Verwendung mit “klassischen” Dictionaries gedacht, nicht aber für generische.

Was nicht ist, kann ja noch werden

Und hier wirds erst richtig spassig. Live-Templates können auch ganz einfach selbst erstellt werden. Hierfür gibt es einen einfachen Editor, wo man sich die Live-Templates erstellen kann. Unser angepasstes Skript von oben sieht nun folgendermassen aus:

Livetemplate erstellen

Man definiert also das Template mit Platzhalter. Für diese wiederum kann man dann Makros definieren, welche dem Live Template eine gewisse Inteligenz mitgeben. So wird hier als Beispiel für den DICT-Platzhalter definiert, dass eine Variable vom Typ System.Collections.Generic.Dictionary vorgeschlagen werden soll. Dies veranlasst Resharper bei der Verwendung des Templates dann dazu, im Code nach einer entsprechenden Variable zu suchen.

Wenden wir nun das Template auf unseren Code von oben an:

Erstelltes Livetemplate wählen

Generierter Code des Livetemplates

Et voilà – nun passts perfekt. Die Typen werden korrekt erkannt und die Iterationsvariable hat jetzt auch den korrekten Datentyp. Nettes Gimmick dazu: Im eingeblendeten DropDown macht uns Resharper gleich noch Namensvorschläge die an dieser Stelle evtl. Sinn machen könnten.

Tags:

Me, Myself and ReSharper #1: Goto Member

January 21st, 2009 No comments

Der ReSharper ist schon eine ganze Weile das erste Tool das mir nach der VS-Installation auf die Kiste kommt. Da ich immer wieder Fragen à la “Wozu braucht man den noch, VS kann ja auch Refactoring” höre, blogge ich nun in unregelmässigen Abständen über meine schönen Erlebnisse mit R# :-)

Mit ALT+< erhalt liefert mir R# eine Liste aller Members der gerade offenen Klasse:

Resharper Codenavigation

Wie man sieht lässt sich die Liste auch durchsuchen

Tags:

ReSharper 3.0 ist da!

June 21st, 2007 No comments

Von meinem absoluten Liebling in Sachen “mach mehr aus VS” ist nun die Version 3 erschienen.

Neben dem, dass auch in der dritten Version meine zwei Cores mitsamt RAM arg gekitzelt werden, sind noch einige weitere nette Features dazugekommen.

Eine uneingeschränkte 30-tägige Testversion gibts hier.

Tags:
Sharing Buttons by Linksku