Staying Sharp – Besser Programmieren mit ReSharper

Und weiter geht es mit statischer Codeanalyse. Letztes Mal habe ich euch Checkstyle für Java vorgestellt. Heute geht es um ein Werkzeug, das (überwiegend) für .NET gedacht ist: ReSharper von der Firma Jetbrains. Im Gegensatz zu Checkstyle ist es kein kostenloses OpenSource-Tool, sondern kostet euch etwas Geld. Als Privatperson sind das (für das ReSharper Ultimate Pack) 149$ im ersten Jahr, danach 119$ und ab dem dritten Jahr 89$ pro Jahr. Für OpenSource Projekte oder auch Schulen gibt es die Software sogar umsonst. Wenn ihr es in eurer Firma verwenden wollt, wird es etwas teurer, doch auch hier gibt es Mengenrabatte. Und diese Software ist meiner Meinung nach jeden Cent wert.

First steps – configuring ReSharper

Die Software kommt als eigener Installer daher, den ihr auf der Produktseite herunterladen könnt. Bei der Installation könnt ihr wählen, für welches VisualStudio ihr sie installieren wollt. Nach der Installation findet ihr in eurer Leiste oben in VisualStudio einen neuen Menüpunkt namens ReSharper. Zu allererst solltet ihr hier in die Einstellungen gehen und die Inspections für eure Programmiersprache(n) einstellen. Dort könnt ihr festlegen, welche “Vergehen” am Code als Fehler, Warnung, Hinweis oder Empfehlung (oder gar nicht) gemeldet werden sollen. Außerdem könnt ihr die Formatierungsregeln für eueren Code definieren. Fast alle eurer Coding-Guidelines könnt ihr so automatisiert mit ReSharper überprüfen lassen.

Einstellung der Inspection Severities
Einstellungen für das automatische Aufräumen
Einstellungen für die Formatierung

Diese Einstellungen werden anschließend für die Überprüfung eurer Solution sowie die automatische Code-Formatierung angewendet. Wenn ihr die Einstellungen speichert, habt ihr unter “Save to” drei Möglichkeiten: Computer, Personal und Team-Shared. Computer speichert die Einstellungen als globale Einstellungen für alle Solutions auf eurem PC, Personal speichert die Einstellungen lediglich für die aktuelle Solution. Das ist dahingehend angenehm, dass man in unterschiedlichen Projekten mit unterschiedlichen Checks arbeiten kann. Arbeitet man mit mehreren Kollegen im Team, könnte man die Einstellungen exportieren und zum Beispiel per Mail verschicken. Wesentlich schöner ist es allerdings, auf die dritte Möglichkeit zurückzugreifen: Team-Shared. Dadurch wird eine Konfigurationsdatei erzeugt, welche auf der gleichen Ebene wie die Solutiondatei abgelegt wird. Diese ist leicht zu erkennen, da sie wie die Solution heißt, also in unserem Beispiel ShareProvider.sln.DotSettings. Diese könnt ihr dann in das Versionskontrollsystem eures Projektes mit einchecken und eure Kollegen bekommen sie beim nächsten Update/Pull. Das schöne daran: Resharper erkennt automatisch, dass eine Konfigurationsdatei für die Solution vorhanden ist und lädt die Einstellungen.

Speichermöglichkeiten für die Konfiguration.

Bezüglich der Priorität überschreiben Team-Shared Einstellungen die globalen Einstellungen (Computer), und Personal alle anderen.

Fix it!

Habt ihr alle Einstellungen vorgenommen und speichert diese ab, so beginnt Resharper, eure Solution zu analysieren (in der Startseite der Einstellung solution-wide analysis aktivieren). In eurem Code seht ihr dann die betroffenen Stellen in unterschiedlichen Farben unterringelt und in der Scrollbar durch farbliche Striche markiert. Grün bedeutet dabei Hinweis, gelb ist eine Warnung und rot bedeutet Fehler. Zudem werden in einem separaten Fenster alle Warnungen und Fehler der Solution aufgelistet. Wie das aussieht, seht ihr in nachfolgendem Bild.

Warnungen im Code

Bewegt ihr nun euren Cursor zu einer der betroffenen Stellen, so erscheint links am Rand eine Glühbirne. Bei Fehlern ist auch diese rot, bei Warnungen gelb. Wenn ihr auf diese klickt, wird euch ein automatischer Fix vorgeschlagen, den Resharper für euch ausführen wird. Ihr könnt zusätzlich festlegen, dieses Vergehen nur an dieser Stelle, in der gesamten Datei oder sogar in der gesamten Solution vorzunehmen. Gerade Letzteres ist aber mit Vorsicht zu genießen. Wenn ihr an einer Stelle aber bewusst den Code so belassen wollt, so könnt ihr die Warnung mit einem speziellen Kommentar deaktivieren. Auch das erledigt Resharper für euch. Falls ihr nicht klicken wollt, sondern so wie ich ein Fan von Keyboard-Shortcuts seid, so könnt ihr über die Kombination Alt+Enter das Kontextmenü der Glübbirne öffnen und dann mit einem erneuten Druck auf Enter die Aktion bestätigen. Ich habe mich inzwischen so daran gewöhnt, dass ich auch in Outlook versuche, falsch geschriebene Wörter mit Alt+Enter zu korrigieren :-D.

Kontextmenü einer Glühbirne

Dateien lassen sich wesentlich schneller von Warnungen befreien, wenn man auf das automatische Code Cleanup zurückgreift. Darüber werden verschiedene Aktionen automatisch ausgeführt, die ihr zuvor in den Einstellungen vorgenommen habt, wie z.B. automatisches Hinzufügen fehlender Klammern, entfernen ungenutzer Imports oder Formatieren des Codes. Ihr führt den Cleanup über die Tastenkombination Strg+E, Strg+C aus, wählt dann euer Formatierungsprofil (ihr könnt mehrere anlegen) und bestätigt das Profil mit einem Klick auf Run oder einen Druck auf Enter. Das nächste Bild zeigt euch, wie das aussieht.

Dialog für den automatischen Code Cleanup

Für einen einheitlichen Code-Stil im Team ist es unerlässlich, dass jeder die Dateien mit den gleichen Einstellungen formatiert. Wenn ihr Kollegen habt, die das Formatieren öfter vergessen, oder ihr euch selbst zu den Vergesslichen zählt, so könnt ihr ein Plugin für VisualStudio installieren, dass vor dem Speichern automatisch den Code Cleanup durchführt.

Go to everywhere!

Eines meiner absoluten Lieblingsfeatures ist die Funktion Find Text. Resharper indiziert alle eure Dateien und kann super schnell zu jeder beliebigen Stelle im Code springen. Durch einen Druck auf Strg + T, T, T (drei Mal hintereinander T drücken) öffnet sich ein Dialog, in dem ihr nach Text suchen könnt. Ich nenne das Feature Go To Everywhere, da man nicht nur an Code-Stellen, sondern auch in Kommentare, Resource-Dateien oder Log-Nachrichten springen kann. Und es fetzt wirklich, bereits ab dem ersten Buchstaben wird nach Treffern gesucht.

Funktion Find text
One more thing… (actually, two more things)

Zum Schluss möchte ich euch noch zwei weitere coole Funktionen vorstellen. ReSharper verfügt unter anderem auch über einen Regex-Validierer. Dort könnt ihr euren regulären Ausdruck einfügen oder designen und gleichzeitig überprüfen, ob eure Input-Texte durch den regulären Ausdruck gematcht werden. Klar, das kann man auch auf zig Seiten online tun, aber hier ist es gleich mit dabei und man muss die IDE nicht verlassen.

Validieren von regulären Ausdrücken

Wie ihr seht, werden auch die einzelnen Gruppen mit angezeigt, die über den regulären Ausdruck definiert und im Text gefunden wurden. So lässt sich die Logik im Code einfach korrigieren, wenn man z.B. nach speziellen Gruppeninhalten suchen möchte und das Programm noch nicht korrekt funktioniert.

Das letzte Feature für heute hat mit Architektur zu tun. Ihr könnt mit ReSharper die Architektur für eure Projekte und auch für die Solution analysieren. Die Architektursicht auf Solutionebene wird erst bei größeren Solutions interessant, wenn man überprüfen möchte, welche Projekte wie mit welchen anderen Projekte verknüpft sind. In unserem Beispiel sieht das eher unspektakulär aus:

Architektursicht der Solution

Betrachtet man nun die Architektur des Projektes ShareProvider, wird das Ganze schnell interessant. Mit Hilfe dieser Ansicht könnt ihr bereits früh mögliche Verstöße gegen die geplante Architektur erkennen und reagieren. Wenn ihr mit Bestandscode arbeiten müsst, könnt ihr euch zudem sehr schnell einen Überblick über die bestehende Architektur und Struktur eines Projektes machen.

Architektursicht eines Projektes

Damit bin ich am Ende mit einem kurzen Überblick über ReSharper. Es gäbe noch wesentlich mehr darüber zu berichten, aber das sprengt den Umfang eines einzelnen Blogbeitrags.

Ursprünglich sollte dieser Artikel am Freitag erscheinen, da ich alle zwei Wochen Freitags einen neuen Artikel veröffentlichen möchte. Mangels Windows-PC (der, den ich verwenden wollte, ist am Montag abgeraucht) musste ich jedoch erst eine VM aufsetzen und die Werkzeuge installieren, um Screenshots für euch machen zu können.

Kommentare 1

Leave a Reply

Your email address will not be published. Required fields are marked *