Montag, 18. August 2008

Microsoft StyleCop

Vor kurzem bin ich wieder einmal über ein sehr nettes Tool gestolpert, das Microsoft den C#-Programmierern zur Verfügung stellt, um die Codequalität zu verbessern, ähnlich dem FxCop. Anders als der angesprochene FxCop analysiert der StyleCop allerdings keine Assemblies sondern den geschriebenen Code direkt im VisualStudio. Auch werden von ihm natürlich andere Themengebiete abgedeckt als vom FxCop.

Hat man den StyleCop hier heruntergeladen und installiert, hat man im VisualStudio im Menü "Extras" ("Tools" in der englischen Version) zwei neue Menüpunkte, mämlich "Run Source Analysis" und "Run Source Analysis (Rescan all)". Die erste Option kann auch durch die Tastenkombination Ctrl + Shift + Y aufgerufen werden. Führt man die Quellcode-Analyse durch, erscheint ein neues Fenster, das die Ergebnise für die Solution enthält.

Hingewiesen wird hier unter anderem auf fehlende Dokumentationskommentare, "falsche" Formatierung und ähnliches. Weiterhin bekommt man eine Meldung, wenn man beispielsweise vergessen hat, einer Klasse explizit einen Zugriffsmodifizierer zuzuweisen, was ja doch schon mal passieren kann, wenn die Klasse sowieso private sein soll.

Interessant finde ich das AddOn hauptsächlich deswegen, weil es einem die Coding-Guidelines, die (zumindest teilweise) bei Microsoft verwendet werden. Ein paar Kleinigkeiten habe ich bereits gelernt, zum Beispiel, dass Using-Direktiven innerhalb eines Namespace gemacht werden und jede Datei einen definierten Header bekommen sollte. Die Sache mit den Using-Direktiven verstehe ich zwar noch nicht wirklich, doch den Grund hierfür werde ich schon noch herausfinden.  Falls da jemand etwas Genaueres sagen kann, so möge er dies doch bitte via Kommentar tun. Header verwende ich natürlich in meinen Sourcefiles, doch nicht in der Form, wie sie der StyleCop verlangt.

Für jeden, der sich für die Optimierung seines Codings interessiert, der möge sich den StyleCop herunterladen und installieren. Bei mir wird er jedenfalls jetzt regelmäßig zum Einsatz kommen.

Nachtrag: Wie ich gerade festgestellt habe, halten sich die von VisualStudio generierten Codedateien selbst nicht an die Vorgabe des StyleCop. Interessant...

2 Kommentare:

Anonym hat gesagt…

Über die Sache "using directives must be placed inside of the namespace" bin ich auch bereits gestolpert. Kennst du den Grund für diese Regel? Gerade weil sich der VS Designer ja nicht daran hält.

BBo hat gesagt…

Hallo André,

den Grund für das Verlegen von Using-Direktiven in den Namespace findet man in der Datei StyleCop.chm. Diese findest Du im Docs-Verzeichnis deiner StyleCop-Installation.

Zu lesen sind dort zwei Gründe für die Regel:

1. Placing using-alias directives within the namespace eliminates compiler confusion between conflicting types.

2. When multiple namespaces are defined within a single file, placing using directives within the namespace elements scopes references and aliases.

Der erste Fall bezieht sich also nicht auf die standardmäßige Verwendung von "using", um Namespaces einzubinden, sondern auf die Verwendung zur Herstellung von Alias-Namen.

Der zweite Fall dürfte, meines Erachtens, nicht wirklich häufig (besser: NIE) auftreten, da eine Verwendung von zwei unterschiedlichen Namespaces innerhalb einer Datei für mich sowieso ein Verstoß gegen die Coding-Guidelines darstellt.

Für Beispiele zu den beiden genannten Fällen kannst du in der bereits oben erwähnten Datei nachschauen. Die CheckId ist die "SA1200", die du unter "Ordering Rules" finden kannst.

Gruß,
BBo