Rash thoughts about .NET, C#, F# and Dynamics NAV.


"Every solution will only lead to new problems."

Saturday, 6. October 2007


ReSharper 3.0 für Visual Studio 2005 im Test – Refactoring für Profis

Filed under: .NET,ASP.NET,C#,Firmen,Tools,Visual Studio — Steffen Forkmann at 12:03 Uhr

ReSharper ist ein Plugin der Firma JetBrains für Visual Studio, das sich speziell die Produktivitätssteigerung beim Entwickeln als Ziel gesetzt hat. Besonderes Augenmerk wird dabei auf die Refactoring-Unterstüzung gelegt, also auf das nachträgliche Umgestalten von Quellcode. JetBrains wirbt damit das “intelligenteste AddIn für Visual Studio” entwickelt zu haben – doch was kann ReSharper wirklich? 

Download & Installation

ReSharper 3.0.2 gibt es bei JetBrains als 30-Tage Testversion zum Download. Die Installation gestaltet sich wirklich einfach – empfehlenswert ist jedoch Visual Studio vorher zu schließen. Nach vollendeter Installation und erneutem Starten von Visual Studio wird die Shortcutbelegung für ReSharper abgefragt. Es besteht die Wahl zwischen “Visual Studio” und “IntelliJ IDEA”. Beim “Visual Studio”-Schema werden die bekannten Standard-Refactoring-Features von Visual Studio einfach mit den analogen ReSharper-Features überschrieben, während die zweite Einstellung für Entwickler gedacht ist, die bereits mit IntelliJ IDEA oder ReSharper 2.5 gearbeitet haben.

ReSharper Keyboard Schema

Seit der Version 3.0 kann man die Keyboard-Belegung nun auch jederzeit über ReSharper/Options/Environment/General editieren. Im weiteren werde ich jedoch nur auf die “Visual Studio”-Belegung eingehen.

IntelliSense-Erweiterungen

Visual Studio 2005 bringt standardmäßig eine Reihe von “IntelliSense”-Features mit, die das Entwicklerleben einfacher gemacht haben. ReSharper erweitert diese Features noch um einige weitere Möglichkeiten. So ist es zum Beispiel möglich alle im Projekt verwendeten Typen im IntelliSense auszuwählen und nicht nur die Importierten. Das möglicherweise erforderliche Using-Statement wird von ReSharper automatisch ergänzt.

Code-Assistent

Immer wenn die Glühbirne Code Assistent am linken Bildschirmrand erscheint, hat der Code-Assistent eine Möglichkeit zum Refactoring gefunden. Durch Druck auf ALT+ENTER werden die gefundenen Möglichkeiten aufgelistet. Hier einige Beispiele:

  • Member-Variablen, die nicht beschrieben werden, können “readonly” gesetzt werden:

 Code-Assistent 

  • Stringverkettungen können in String.Fomat() umgewandelt werden:

Code-Assistent

  • Falls festgestellt wird, dass eine benutzte Variable NULL sein könnte, wird ein “If(variable != null)” angeboten:

Code-Assistent

  • Wenn erkannt wird, dass der benutzte Namespace in einer Datei nicht der Struktur innerhalb der Projektmappe entspricht, kann der Namespace verlagert werden:

Code-Assistent

Code-Navigation

ReSharper bildet intern den gesamten abstrakten Syntaxbau des Projektes ab und kann so genau erkennen, wann Refactoring eingesetzt werden kann. Das AddIn ist so u.a. in der Lage alle Aufrufe einer Funktion (ALT+F7) innerhalb der gesamten Projektmappe zu finden. Neben der Anzeige dieser Stellen ist auch eine einfache Navigation innerhalb der Aufrufhierarchie möglich.

usages

Besonders nett ist dieses Feature, wenn man innerhalb von Klassenhierarchien an abgeleitete Stellen navigieren möchte.

Toter Code

Da alle Funktions-Aufrufe der Projektmappe analysiert werden, ist ReSharper auch in der Lage “toten Code” zu erkennen, also Code der nirgends aufgerufen wird. Dieser Code wird grau markiert und kann getreu dem YAGNI-Prinzip (You Ain’t Gonna Need It) per ALT+ENTER gelöscht werden.

Toter Code

Tote Referenzen 

Das Feature funktioniert so gut, dass ich mittlerweile bei grauem Code automatisch ALT+ENTER drücke und den Code lösche. Falls der sehr seltene Fall eintritt, dass man die Funktion irgendwann doch nochmal braucht, dann schreibt man sie eben neu – oder schaut in seine Versionsverwaltung.

Codeformatierung

Nachdem man ReSharper installiert hat, zeigt sich Visual Studio in einem etwas anderen Gesicht. Das Erste das auffällt, ist das verfeinerte Syntax-Highlighting. Aber auch beim Tippen von Code darf man sich an einige neue Features gewöhnen – u.a. werden geöffnete Klammern immer gleich wieder geschlossen und der Cursor zwischen die Klammern geschoben. Das größte Feature in diesem Bereich ist jedoch die automatische Codeformatierung mit STRG+ALT+F. Je nach eingestellter Stufe werden hier toter Code entfernt, die Klassen-Member alphabetisch geordnet, Usings optimiert und die Blockeinrückung nach voreingestellter Konvention korrigiert.

Leider hat das Feature in der getesteten Version 3.0.2 noch ein paar kleine Macken, so dass ReSharper beim Neuformatieren einiger längerer Dateien einen “Out of Memory Error” meldet. Laut JetBrains Bugdatenbank wurde das Problem bereits gelöst – der Patch ist aber noch nicht downloadbar.

Die Farbanzeige

Neben dem Quellcodefenster zeigt ReSharper eine Farbanzeige mit einem Überblick über den Status des aktuellen Dokuments an. Die Balken stellen dabei Links zu den entsprechenden Stellen im Dokument dar und die Position innerhalb des Dokuments wird auf die Größe der Scrollleiste skaliert.

Roter Rand - Compile-Error

Gelber Rand - Warnungen / Toter Code / Refactoringanweisungen

Grüner Rand - Alles Ok / Empfehlungen

Roter Rand:Compile-Error Gelber Rand:Warnungen / Toter Code / Refactoringanweisungen Grüner Rand:Alles Ok / Empfehlungen zum Refactoring

Leider gibt es keine solche Anzeige für alle Dateien innerhalb eines Projektes, so dass man alle Dateien manuell öffnen und ansehen muss.

UnitTesting

ReSharper bietet wie viele andere Tools eine erweiterte Unterstützung für UnitTests. Dabei werden aktuell NUnit, csUnit und über ein zusätzliches Plugin auch mbUnit angeboten. Leider gibt es scheinbar keine Möglichkeit das UnitTest-Framework von Visual Studio Team System zu benutzen, so dass ich hier nicht weiter getestet habe.

Refactoring

Das Herz von ReSharper ist natürlich das Refactoring. Es werden hier so viele Funktionen angeboten, so dass ich hier nur auf die Wichtigsten eingehen möchte. Eine komplette Übersicht aller Refactoring-Features gibt es auf der ReSharper-Homepage.

Als wichtigsten ReSharper-Shortcut sollte man sich STRG+SHIFT+R für “Refactor This” merken. Diese Funktionalität bietet abhängig vom Kontext eine Auswahl der gerade möglichen Refactoring-Möglichkeiten.

refactor_this

Neben den bereits aus Visual Studio bekannten Features wie “Feld einkapseln” und “Umbenennen” gibt es zum Beispiel Möglichkeiten um Eigenschaften in Methoden zu konvertieren und umgekehrt, Methoden entlang von Vererbungshierarchien zu verschieben und Interfaces in Abstrakte Klassen zu konvertieren. Ein besonders nettes Feature ist, dass man ganze Quelltextblöcke als eigenständige Methoden auslagern kann. ReSharper erkennt dabei sogar automatisch welche Parameter der Methode übergeben werden müssen:

Extract Method

Fazit

ReSharper ist ein ausgezeichnetes Tool um die Produktivität in Visual Studio zu steigern. Es werden viele Refactoring-Features angeboten und durch die Farbanzeige am Bildschirmrand hat man immer einen Überblick über den aktuellen Stats der Datei (leider nicht über das gesamte Projekt). Ein kleiner Wermutstropfen ist die fehlende UnitTest-Unterstützung für Visual Studio Team System und der mit 249 $ (C#-Edition für Firmen) doch meiner Meinung nach recht saftige Preis.

Tags: , , , ,

1 Comment »

  1. […] einiger Zeit habe ich einen Testbericht zu ReSharper verfasst und einige kleinere Bugs bemängelt. JetBrains gibt jedoch […]

    Pingback by ReSharper - Early Access Program (EAP) » Blog der Microsoft .NET / Dynamics NAV - Group Halle — Friday, 9. November 2007 um 16:46 Uhr

RSS feed for comments on this post. | TrackBack URI

Leave a comment

XHTML ( You can use these tags): <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> .