Frage

unter Verwendung einer modifizierten Version der Standard „Methoden zu groß“ Abfrage

Ich versuche NDepend zu bekommen lange Methoden zu identifizieren.

Ich will nicht lange Methoden berichten, dass die Entwickler über wenig Einfluss haben, so dass ich das DebuggerNonUserCode Attribut und InitializeComponent() generierten Code herauszufiltern verwenden.

Leider habe ich immer noch ein paar Fehlalarme als Methoden in generierten Typen werden ebenfalls berichtet. Das Problem ist, dass, während der Typ selbst das DebuggerNonUserCode Attribut hat, die Methoden nicht, so dass sie in der Ausgabe trotz der Tatsache, enthalten sind, dass sie erzeugt werden.

Ich bin auf der Suche nach so etwas wie eine Verbindung zwischen Arten und Methoden: Geben Sie ihnen alle Arten, die nicht das DebuggerNonUserCode Attribut haben und die Abfrage auf diejenigen laufen, aber ich kann nicht herausfinden, wie diese in CQL auszudrücken.

Für einige der Baugruppen, kann ich einfach Filter auf den vollständigen Namen, aber leider mischen einige unserer Baugruppen Entwickler gemacht und Typen erzeugt. Leider kann die IsGeneratedByCompiler auch nicht in diesem Fall verwendet werden.

Meine Abfrage

WARN IF Count > 0 IN SELECT METHODS WHERE 
   NbLinesOfCode > 30 AND
   !HasAttribute "System.Diagnostics.DebuggerNonUserCodeAttribute" AND
   !NameIs "InitializeComponent()"
   ORDER BY NbLinesOfCode DESC
War es hilfreich?

Lösung

Brian dank -Code Regel über LINQ Query (CQLinq) den Quellcode der Coderegel ist Sie fordern:

warnif count > 0
from m in Application.Methods where
  m.NbLinesOfCode > 30 &&
 !m.ParentType.HasAttribute( "System.Diagnostics.DebuggerNonUserCodeAttribute") &&
  m.Name != "InitializeComponent()"
orderby m.NbLinesOfCode descending
select new { m, m.NbLinesOfCode }

Die CQLinq Syntax bietet auch eine Möglichkeit, zu definieren, was ist Just-My-Code . Diese Funktion ist beschreiben hier . Grundsätzlich müssen Sie den Satz JustMyCode definieren, durch Abfragen mit vorangestelltem notmycode . Dann wird die Regel Sie fordern leicht umgeschrieben werden kann:

warnif count > 0
from m in JustMyCode.Methods where
   m.NbLinesOfCode > 30
orderby m.NbLinesOfCode descending    
select new { m, m.NbLinesOfCode }

Der Satz JustMyCode definiert ein für alle Mal kann über einen beliebigen Code Regel wiederverwendet werden. Zusätzlich ist es möglich an der aussehen notmycode Standardabfrage Discard erzeugt und Designer-Methoden von JustMyCode

Andere Tipps

Ich mag NDepend, aber es ist nach wie vor der größte Einzel Manko, dass Namespace / Typ / Methode Info nicht in einer einzigen Abfrage verbunden werden können. Dieses Feature würde CQL wirklich starke Sache machen.

Abgesehen davon, dass die Kontrollen ' IsGeneratedByCompiler ' und ' IsInFrameworkAssembly ' sehr nützlich sein. Sie können auch Entferner bestimmten Namespaces aus der Abfrage ( OUT OF SPACES "..." )

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top