ReSharper - закручивает фигурные скобки вокруг одной строки


101

Могу ли я настроить ReSharper для исправления кода C #, когда фигурные скобки не используются для окружения однострочного блока кода, например:

if (blnSomeCondition)
   DoSomething();  // complain

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

Спасибо


3
Хороший вопрос, а что не так с первым синтаксисом? Локоны не нужны.
Мика

43
Некоторые разработчики утверждают, что лучше включать фигурные скобки вокруг однострочного блока кода, поскольку он может быть более читабельным и более удобным в обслуживании.
Райан Бергер

33
Кроме того, я видел, сколько раз неиспользование брекетов приводило к ошибкам. Кто-то вносит изменения, видит if и добавляет новую строку, не понимая, что это не будет выполняться как часть условия. Это незаметно, но случилось.
Хади Харири

2
У меня действительно нет проблем с первым форматом, но я вижу, что это может привести к ошибкам в сценарии, о котором упоминал Хади. Наша команда решила, что это стандарт кодирования, который мы хотим внедрить, поэтому я задаю этот вопрос.
Booberry 03

5
Лично я предпочитаю не использовать фигурные скобки для однострочных «if», а поместить «if» и следующий оператор в одну и ту же физическую строку, например, «if (blnSomeCondition) Do Something ();».
Пол Руан

Ответы:


148

В новой версии ReSharper (2016.x) перемещен в стиль кода. ReSharper 2016.1.1

UPD1: для ReSharper 2017.x ReSharper 2017.1.2

UPD2: для ReSharper 2018.x ReSharper 2018.1

UPD3: для ReSharper 2019.x ReSharper 2019.1

UPD4: для ReSharper 2020.x введите описание изображения здесь


35

Райан прав (обратите внимание, что его ссылка относится к справке R # 2.0). Конкретная процедура выглядит следующим образом:

  1. Перейдите в ReSharper> Параметры> Языки> C #> Стиль форматирования> Макет фигурных скобок.
  2. Установите "Фигурные скобки в" if-else "заявлении" на "Использовать фигурные скобки для многострочного"
  3. После сохранения изменений выберите область для переформатирования (это может быть выбор кода, файл, папка, проект, решение - все, что угодно).
  4. Выберите ReSharper> Инструменты> Код очистки.
  5. Прибыль.

Помните, что Code Cleanup выполняет множество функций, и они не только связаны с форматированием кода (подробности см. На http://www.jetbrains.com/resharper/webhelp/Code_Cleanup__Index.html ), поэтому используйте эту функцию с умом.


28

Решение Gorohoroh близко, но вместо выбора «Использовать фигурные скобки для многострочного» мне пришлось выбрать «Добавить фигурные скобки», чтобы заставить его добавить фигурные скобки в однострочном сценарии. И мне пришлось установить это во всех шести выпадающих списках под «Force Braces», чтобы уловить все сценарии:

альтернативный текст

На что я действительно надеялся, так это на возможность настроить ReSharper на выдачу желтого предупреждения или красной ошибки при нарушении правила, но я не нашел способа сделать это. Поскольку ты прав, Горохорох, Cleanup Code делает много вещей, и я хотел бы иметь возможность просматривать и исправлять нарушения правил по одному.

Спасибо за вашу помощь!


8

Для ReSharper 2016.2.2 .

Вам следует отредактировать свой профиль для очистки. Правильный элемент называется « Добавить / удалить фигурные скобки» для отдельных операторов в «if-else», «for», «foreach», «while», «do-while», «using» . Этот элемент можно найти в стилях C # => Code. .

Если пункт отмечен, фигурные скобки будут добавлены; если не отмечено, фигурные скобки будут удалены.

Примечание: добавление сейчас не работает (не знаю почему - возможно, слишком свежая версия ReSharper).Однако, если вы снимете отметку с упомянутого пункта, существующие фигурные скобки вокруг отдельных операторов не будут удалены.

UPD: Проблема решена, см. Первые два комментария под этим постом.


2
Это работает в версии 2016.3.2 немного по-другому - в разделе «Параметры» перейдите в раздел « Редактирование кода» -> C # -> «Стили кода» -> фигурные скобки -> в операторе «Если» , а затем выберите «Применять всегда» в разделе «Настройки». Другие варианты: «Не применять», «Применять, если текст является многострочным», «Применять, если оператор является многострочным» и т. Д.
Chait

Ницца. Спасибо! И после этих настроек описанная мною очистка работает исправно.
Иордания


1

Просто, если это поможет кому-то еще сэкономить время, на одной машине моей компании последовать советам Сергея было недостаточно, несмотря на отличное качество его поста.

При соответствующей настройке (VS2017, R # 2019, оба обновлены) эти настройки на стороне R # уже были хорошими, но мне также пришлось изменить их в параметрах Visual Studio:

  • В окне Параметры перейдите в Текстовый редактор -> C # -> Стиль кода -> Форматирование -> Общие. ,
  • Установите флажок « Выполнять дополнительную очистку кода во время форматирования » и « Добавить / удалить фигурные скобки для однострочного управляющего оператора ».

0

Ну это снова перемещено. Новое место находится под стилем синтаксиса в версииReSharper 2020.01 .

Перейти к ReSharper > Options > Code Editing > C# > Syntax Style > Braces

Вот скриншот из ReSharper 2020.01

введите описание изображения здесь

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.