ReSharper - wymuś zakręcenie aparatu wokół pojedynczej linii

101

Czy mogę skonfigurować ReSharper, aby naprawić kod C #, gdy nawiasy klamrowe nie są używane do otaczania jednowierszowego bloku kodu, na przykład:

if (blnSomeCondition)
   DoSomething();  // complain

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

Dzięki

Booberry
źródło
3
Dobre pytanie, ale co jest nie tak z pierwszą składnią? Aparat ortodontyczny jest zbędny.
Micah
43
Niektórzy programiści twierdzą, że lepszą praktyką jest umieszczanie nawiasów klamrowych wokół jednowierszowego bloku kodu, ponieważ może być bardziej czytelny i łatwiejszy w utrzymaniu.
Ryan Berger
33
Ponadto widziałem, ile razy niestosowanie zamków do curlingu prowadziło do błędów. Ktoś wprowadza zmianę, widzi if i dodaje nową linię, nie zdając sobie sprawy, że nie zostanie ona wykonana jako część warunku. To subtelne, ale się wydarzyło.
Hadi Hariri
2
Nie mam problemu z pierwszym formatem, ale widzę, że może to prowadzić do błędów w scenariuszu, o którym wspomniał Hadi. Nasz zespół zdecydował, że to standard kodowania, który chcemy egzekwować, dlatego zadaję to pytanie.
Booberry
5
Osobiście wolę nie używać nawiasów klamrowych dla pojedynczej linii „if's”, ale umieszczać „if” i następującą instrukcję w tym samym wierszu fizycznym, np. „If (blnSomeCondition) Zrób coś ();”.
Paul Ruane,

Odpowiedzi:

148

W nowej wersji ReSharper (2016.x) został przeniesiony do stylu kodu. ReSharper 2016.1.1

UPD1: dla ReSharper 2017.x ReSharper 2017.1.2

UPD2: dla ReSharper 2018.x ReSharper 2018.1

UPD3: dla ReSharper 2019.x ReSharper 2019.1

UPD4: dla ReSharper 2020.x wprowadź opis obrazu tutaj

Siergiej G.
źródło
35

Ryan ma rację (zauważ jednak, że jego link odnosi się do pomocy R # 2.0). Konkretna procedura jest następująca:

  1. Przejdź do ReSharper> Opcje> Języki> C #> Styl formatowania> Układ nawiasów klamrowych
  2. Ustaw „Nawiasy klamrowe w instrukcji„ if-else ”na„ Użyj nawiasów klamrowych dla wielu wierszy ”
  3. Po zapisaniu zmian wybierz zakres do ponownego sformatowania (może to być wybór kodu, plik, folder, projekt, rozwiązanie - cokolwiek chcesz).
  4. Wybierz polecenie ReSharper> Narzędzia> Kod czyszczenia.
  5. Zysk.

Pamiętaj, że czyszczenie kodu robi wiele rzeczy i nie są one związane tylko z formatowaniem kodu (zobacz szczegóły na http://www.jetbrains.com/resharper/webhelp/Code_Cleanup__Index.html ), więc korzystaj z tej funkcji mądrze.

Jura Gorohovsky
źródło
28

Rozwiązanie Gorohoroh jest bliskie, ale zamiast wybierać opcję „Użyj nawiasów klamrowych dla multilinii”, musiałem wybrać opcję „Dodaj nawiasy klamrowe”, aby wymusić dodanie nawiasów klamrowych w scenariuszu z jedną linią. Musiałem to ustawić we wszystkich sześciu rozwijanych menu w sekcji „Force Braces”, aby złapać wszystkie scenariusze:

tekst alternatywny

Naprawdę liczyłem na to, że będę w stanie skonfigurować ReSharper, aby zrobił żółte ostrzeżenie lub czerwony błąd, gdy reguła zostanie naruszona, ale nie znalazłem sposobu, aby to zrobić. Ponieważ masz rację, Gorohoroh, Cleanup Code robi wiele rzeczy i chciałbym mieć możliwość obejrzenia i naprawienia naruszeń zasad pojedynczo.

Dzięki za pomoc!

Booberry
źródło
8

W przypadku ReSharper 2016.2.2 .

Powinieneś edytować swój profil w celu wyczyszczenia. Odpowiedni element nazywa się Dodaj / Usuń nawiasy klamrowe dla pojedynczych instrukcji w „if-else”, „for”, „foreach”, „while”, „do-while”, „using” . Ten element można znaleźć w C # => Style kodu .

Jeśli pozycja jest zaznaczona, zostaną dodane nawiasy klamrowe; jeśli odznaczone, szelki zostaną usunięte.

Uwaga: dodawanie nie działa teraz (nie wiem dlaczego - być może zbyt świeża wersja ReSharper). Jeśli jednak odznaczysz wspomnianą pozycję, istniejące nawiasy klamrowe wokół pojedynczych instrukcji nie zostaną usunięte.

UPD: Problem rozwiązany, zobacz pierwsze dwa komentarze pod tym postem.

Jordania
źródło
2
Działa to trochę inaczej w 2016.3.2 - w Opcjach przejdź do Edycja kodu -> C # -> Style kodu -> Nawiasy -> W instrukcji „Jeśli” , a następnie wybierz „Wymuszaj zawsze” w obszarze Preferencje. Inne opcje to „Nie wymuszaj”, „Wymuszaj, jeśli treść jest wieloliniowa”, „Wymuszaj, jeśli instrukcja jest wieloliniowa” itd.
Chait
Miły. Dziękuję Ci! A po tych ustawieniach opisane przeze mnie czyszczenie działa poprawnie.
Jordan
1

Możesz to skonfigurować tak, jak pokazano na zrzucie ekranu.

wymuś nawiasy klamrowe dla jednej linii kodu

PS: dla tych, którzy mają problem z wyświetlaniem adresów URL Imgur.com -> https://ibb.co/b4xijT

Alper Ebicoglu
źródło
1

Jeśli to pomoże zaoszczędzić czas komuś innemu, na jednej maszynie mojej firmy, stosowanie się do rad Siergieja nie wystarczyło, mimo świetnej jakości jego stanowiska.

Jeśli chodzi o konfigurację (VS2017, R # 2019, obie aktualne) te ustawienia po stronie R # były już dobre, ale musiałem je też zmodyfikować w opcjach Visual Studio:

  • W oknie Opcje przejdź do Edytor tekstu -> C # -> Styl kodu -> Formatowanie -> Ogólne ,
  • Zaznacz „ Wykonaj dodatkowe czyszczenie kodu podczas formatowania ” i „ Dodaj / usuń nawiasy klamrowe dla instrukcji sterującej jednowierszowej
AFract
źródło
0

Cóż, znowu się porusza. Nowe miejsce znajduje się pod Stylem składni w wersji ReSharper 2020.01.

Iść do ReSharper > Options > Code Editing > C# > Syntax Style > Braces

Oto zrzut ekranu z ReSharper 2020.01

wprowadź opis obrazu tutaj

ciekawyBoy
źródło