ReSharper - erzwingen Sie geschweifte Klammern um eine einzelne Linie

100

Kann ich ReSharper so konfigurieren, dass C # -Code korrigiert wird, wenn geschweifte Klammern nicht verwendet werden, um einen einzeiligen Codeblock wie folgt zu umgeben:

if (blnSomeCondition)
   DoSomething();  // complain

if (blnSomeOtherCondition)
{
   DoSomethingElse(); // don't complain
}

Vielen Dank

Booberry
quelle
3
Gute Frage, aber was ist los mit der ersten Syntax? Lockenstützen sind nicht erforderlich.
Micah
43
Einige Entwickler argumentieren, dass es besser ist, geschweifte Klammern um einen einzeiligen Codeblock zu setzen, da dieser besser lesbar und wartbarer sein kann.
Ryan Berger
33
Außerdem habe ich gesehen, wie oft das Nicht-Verwenden von Lockenstützen zu Fehlern geführt hat. Jemand nimmt eine Änderung vor, sieht das if und fügt eine neue Zeile hinzu, ohne zu bemerken, dass sie nicht als Teil der Bedingung ausgeführt wird. Es ist subtil, aber es ist passiert.
Hadi Hariri
2
Ich habe nicht wirklich ein Problem mit dem ersten Format, aber ich kann sehen, dass es zu Fehlern in dem von Hadi erwähnten Szenario führen kann. Unser Team hat entschieden, dass es sich um einen Codierungsstandard handelt, den wir durchsetzen möchten. Deshalb stelle ich die Frage.
Booberry
5
Meine persönliche Präferenz ist es, die geschweiften Klammern nicht für einzeilige 'if's' zu verwenden, sondern das 'if' und die folgende Anweisung in dieselbe physische Zeile zu setzen, z. B. 'if (blnSomeCondition) Do Something ();'.
Paul Ruane

Antworten:

148

In der neuen Version von ReSharper (2016.x) wurde in den Codestil verschoben. ReSharper 2016.1.1

UPD1: für ReSharper 2017.x. ReSharper 2017.1.2

UPD2: für ReSharper 2018.x. ReSharper 2018.1

UPD3: für ReSharper 2019.x. ReSharper 2019.1

UPD4: für ReSharper 2020.x Geben Sie hier die Bildbeschreibung ein

Sergey G.
quelle
35

Ryan ist korrekt (beachten Sie jedoch, dass sein Link auf die R # 2.0-Hilfe verweist). Das spezifische Verfahren ist wie folgt:

  1. Gehen Sie zu ReSharper> Optionen> Sprachen> C #> Formatierungsstil> Klammerlayout
  2. Setzen Sie "Klammern in" if-else "-Anweisung" auf "Klammern für mehrzeilige Klammern verwenden".
  3. Wählen Sie nach dem Speichern der Änderungen einen Bereich aus, der neu formatiert werden soll (dies kann eine Codeauswahl, eine Datei, ein Ordner, ein Projekt oder eine Lösung sein - alles, was Sie möchten).
  4. Wählen Sie "ReSharper"> "Extras"> "Bereinigungscode".
  5. Profitieren.

Denken Sie daran, dass die Codebereinigung zahlreiche Funktionen ausführt und sich nicht nur auf die Codeformatierung bezieht (siehe Details unter http://www.jetbrains.com/resharper/webhelp/Code_Cleanup__Index.html ). Verwenden Sie die Funktion daher mit Bedacht.

Jura Gorohovsky
quelle
28

Gorohorohs Lösung ist naheliegend, aber anstatt "Klammern für mehrzeilige Klammern verwenden" auszuwählen, musste ich "Klammern hinzufügen" auswählen, um das Hinzufügen der Klammern im einzeiligen Szenario zu erzwingen. Und das musste ich in allen sechs Dropdowns unter "Force Braces" einstellen, um alle Szenarien zu erfassen:

Alt-Text

Ich hatte wirklich gehofft, ReSharper so einrichten zu können, dass bei Verstößen gegen die Regel eine gelbe Warnung oder ein roter Fehler ausgegeben wird, aber ich habe keinen Weg gefunden, dies zu tun. Weil Sie Recht haben, Gorohoroh, macht Cleanup Code eine Menge Dinge und ich möchte die Möglichkeit haben, die Regelverstöße einzeln zu betrachten und zu beheben.

Danke für Ihre Hilfe!

Booberry
quelle
8

Für ReSharper 2016.2.2 .

Sie sollten Ihr Profil zum Bereinigen bearbeiten. Das richtige Element heißt " Klammern hinzufügen / entfernen" für einzelne Anweisungen in "if-else", "for", "foreach", "while", "do-while", "using" . Dieses Element befindet sich in den C # => Codestilen Codestile.

Wenn das Element aktiviert ist, werden geschweifte Klammern hinzugefügt. Wenn diese Option nicht aktiviert ist, werden geschweifte Klammern entfernt.

Hinweis: Das Hinzufügen funktioniert jetzt nicht (ich weiß nicht warum - möglicherweise eine zu frische Version von ReSharper). Wenn Sie jedoch das erwähnte Element deaktivieren, werden die vorhandenen Klammern um einzelne Anweisungen nicht entfernt.

UPD: Das Problem wurde behoben, siehe die ersten beiden Kommentare unter diesem Beitrag.

Jordanien
quelle
2
Dies funktioniert in 2016.3.2 etwas anders - gehen Sie unter Optionen zu Code-Bearbeitung -> C # -> Codestile -> Klammern -> In "If" -Anweisung Codestile " -Anweisung und wählen Sie dann "Immer erzwingen" unter "Einstellungen". Andere Optionen sind "Nicht erzwingen", "Erzwingen, wenn der Text mehrzeilig ist", "Erzwingen, wenn die Anweisung mehrzeilig ist" usw.
Chait
Nett. Danke dir! Und nach diesen Einstellungen funktioniert die von mir beschriebene Bereinigung ordnungsgemäß.
Jordanien
1

Sie können es wie auf dem Screenshot gezeigt konfigurieren.

erzwingen Sie geschweifte Klammern für eine einzelne Codezeile

PS: Für diejenigen, die Probleme haben, Imgur.com-URLs zu sehen -> https://ibb.co/b4xijT

Alper Ebicoglu
quelle
1

Nur wenn es jemand anderem helfen kann, auf einer Maschine meines Unternehmens Zeit zu sparen, reichte es trotz der hervorragenden Qualität seines Beitrags nicht aus, den Ratschlägen von Sergey zu folgen.

Bei der betreffenden Einrichtung (VS2017, R # 2019, beide auf dem neuesten Stand) waren diese Einstellungen auf der R # -Seite bereits gut, aber ich musste sie auch in den Visual Studio-Optionen ändern:

  • Gehen Sie im Fenster Optionen zu Texteditor -> C # -> Codestil -> Formatierung -> Allgemein ,
  • Aktivieren Sie " Zusätzliche Codebereinigung während der Formatierung durchführen " und " Klammern für einzeilige Steueranweisung hinzufügen / entfernen ".
AFract
quelle
0

Nun ist es wieder bewegt. Der neue Ort befindet sich unter der Version Syntax Style on ReSharper 2020.01.

Gehe zu ReSharper > Options > Code Editing > C# > Syntax Style > Braces

Hier ist der Screenshot von ReSharper 2020.01

Geben Sie hier die Bildbeschreibung ein

neugierigBoy
quelle