Принудительное форматирование фигурных скобок if-else с помощью анализаторов кода

Я пытаюсь применить определенный стиль кода C# для операторов if-else в моей команде, сотрудники которой используют разные IDE (например, Visual Studio, Rider и т. д.). Этот стиль может показаться немного странным, но он уже распространился по кодовой базе и вызывает много шума в PR от членов команды, у которых в своих IDE включено автоформатирование.

По сути, я ищу следующее:

if (condition)
{
    SomeLongMultilineMethodCall(
        param1,
        param2,
        ...);
}
else
    SomeShortMethodCall();

Здесь многострочный оператор if (даже если это одно выражение) заключен в фигурные скобки, но для оставшегося оператора else фигурные скобки не используются, поскольку он состоит из одной строки.

Я просмотрел все популярные библиотеки анализаторов roslyn, включая StyleCop.Analyzers , Roslynator с его правилом RCS1002 и даже ReSharper, но ни одна из них не показалась мне достаточно гибкой. Кто-нибудь знает, как автоматизировать этот стиль кода, или я что-то упускаю?

Вы имеете в виду, что хотите, чтобы это было оформлено так, или вы хотите, чтобы это нашли и изменили?

Fildor 18.08.2024 23:14

Честно говоря, это одна из причин, по которой я выступаю за отключение большей части автоматического форматирования (при сохранении) в больших командах. Количество «шума», которое он вызывает в системе управления версиями, отвлекает больше, чем работа с немного другим форматированием кода или странными вариациями. Если кто-то пишет так, что его трудно читать, обсудите это с ним или внутри команды, чтобы достичь консенсуса. Я бы предпочел увидеть странное (незначительное) несоответствие, чем анализировать изменения форматирования в наборах изменений. Желаем удачи в поиске чего-то, что работает со всеми инструментами.

Steve Py 19.08.2024 00:33

@Fildor, я хочу, чтобы он был оформлен в таком стиле, а все остальные варианты должны быть выделены как недействительные с помощью анализатора roslyn или какого-либо другого инструмента анализа кода.

Sergey Rybalkin 19.08.2024 07:54

@StevePy Я согласен с вами в этом, но мне не нужно что-то, что работает во всех инструментах, если я могу принудительно проверить этот стиль в конвейере CI/CD и отклонить PR с непоследовательным форматированием.

Sergey Rybalkin 19.08.2024 08:01

«И отвергать пиар с непоследовательным форматированием» — вы будете героем команды — НЕТ. Не делайте этого. Это плохая идея. Формат может быть вопросом мнения (и я бы никогда с этим не согласился), но принудительное его применение в CI/CD с автоматическим отклонением поставит вам крест на спине.

Fildor 19.08.2024 08:49
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Анализаторы Roslyn — лучший способ оставаться независимым от IDE и интегрировать эту проверку в свой конвейер CI/CD. Я не думаю, что вы сможете полностью удовлетворить свои требования, поэтому самое близкое решение, которое вы можете получить, — это использовать Roslynator. Попробуйте установить серьезность = предупреждение для следующих правил:

  • RCS1001 - включает фигурные скобки для многострочных выражений.
  • RCS1002 - удаляет фигурные скобки из однострочных выражений.
  • RCS1004 - удаляет скобки из if-else, когда это возможно.

Другие вопросы по теме