In der switch-Anweisung nach fehlendem Standardfall suchen

9

Für ReSharper 6.1 gibt es kein integriertes Prüfelement für fehlende Standardanweisungen innerhalb eines Schalters für C #, die benutzerdefinierten Muster scheinen jedoch generell robust zu sein. Ich habe ein wenig mit ihnen herumgespielt für Fälle wie das Verpassen von else-Anweisungen für if-Blöcke, aber ich bin mir nicht sicher, wie man nach fehlendem Standard sucht.

Folgendes habe ich bisher:

Suchmuster

%Vor%

Ersatzmuster

%Vor%

Wobei $ expr $ ein Ausdruck ist, $ val ist ein Ausdruck, $ statement $ ist eine beliebige Anzahl von Anweisungen und $ missingDefault $ ist ein Maximum von 0 Anweisungen.

Die Probleme hier sind die folgenden:

  • Wir können eine beliebige Anzahl von Fällen haben, die selbst eine Sammlung von einer oder mehreren Anweisungen (case + break usw.) und einer beliebigen Anzahl von Ausdrücken
  • sind
  • Bei der Suche nach Übereinstimmungen mit Suchmustern sollten wir nur mit Vorkommen übereinstimmen, bei denen nach dem letzten Fall nichts ist (dh kein Standardwert)
  • Wir brauchen den 'Bruch' im Suchmuster, so dass wir die Nichtexistenz von Aussagen danach definieren können. Diese Pause wird sowieso vom Compiler benötigt.

Offensichtlich stimmt dieses Suchmuster nur mit Vorkommen überein, die einen Einzelfall und keinen Standard enthalten, also ist es relativ nutzlos. Ich brauche ein Muster, das mit switches mit beliebig vielen Fällen übereinstimmt, von denen jede eine Pause enthalten kann (mit Ausnahme des letzten Falls) und eine beliebige Anzahl von Anweisungen enthalten kann .

Danke für Ihre Hilfe.

    
jropella 08.08.2012, 14:33
quelle

2 Antworten

1

Ich hatte einen guten Riss dabei und ich glaube nicht, dass es derzeit möglich ist (Resharper 7)

Nachdem Sie gesagt haben, dass Sie immer im Resharper-Forum

nachfragen können

Das einzige, was ich anbieten kann, dass kann nützlich sein, ist das Muster zu finden

1) alle switch-Anweisungen

%Vor%

2) die Switch-Anweisungen, die in default; break enden:

%Vor%

Sie könnten dann den Unterschied zwischen diesen beiden Listen verwenden, um festzustellen, bei welchen die default;break; -Anweisung fehlt. Zum Beispiel in meinem Projekt habe ich 231 Vorkommen des ersten und nur 58 des zweiten.

Ich merke, das ist eine lange weg von dem, was Sie wollten (nicht ersetzen!), aber es ist das Beste, was ich aufbringen kann.

    
wal 09.08.2012, 00:10
quelle
0

Ich denke, das ist mit den Suchmustern von ReSharper nicht möglich.
(Und beachten Sie, dass default zwischen case -Anweisungen platziert werden kann.)

Vielleicht hilft Ihnen Visual Studio Suchen und Ersetzen mit der Option Verwenden Sie Reguläre Ausdrücke .

    
thersch 09.08.2012 08:04
quelle