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


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


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.


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!


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.


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

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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.