ReSharper - force les accolades autour d'une seule ligne

101

Puis-je configurer ReSharper pour corriger le code C # lorsque les accolades ne sont pas utilisées pour entourer un bloc de code sur une seule ligne, comme ceci:

if (blnSomeCondition)
   DoSomething();  // complain

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

Merci

Booberry
la source
3
Bonne question, mais qu'est-ce qui ne va pas avec la première syntaxe? Les orthèses curl ne sont pas nécessaires.
Micah
43
Certains développeurs affirment qu'il est préférable d'inclure des accolades autour d'un bloc de code sur une seule ligne, car il peut être plus lisible et plus maintenable.
Ryan Berger
33
De plus, j'ai vu combien de fois ne pas utiliser d'appareils de curling a conduit à des bugs. Quelqu'un fait un changement, voit le if et ajoute une nouvelle ligne, sans se rendre compte qu'il ne s'exécutera pas dans le cadre du conditionnel. C'est subtil mais c'est arrivé.
Hadi Hariri
2
Je n'ai pas vraiment de problème avec le premier format, mais je peux voir que cela pourrait conduire à des bugs dans le scénario mentionné par Hadi. Notre équipe a décidé que c'est une norme de codage que nous souhaitons appliquer, c'est pourquoi je pose la question.
Booberry
5
Ma préférence personnelle est de ne pas utiliser les accolades pour les «if» à une seule ligne, mais de placer le «si» et l'instruction suivante sur la même ligne physique, par exemple «if (blnSomeCondition) Do Something ();».
Paul Ruane

Réponses:

148

Dans la nouvelle version de ReSharper (2016.x), il a été déplacé vers le style de code. ReSharper 2016.1.1

UPD1: pour ReSharper 2017.x ReSharper 2017.1.2

UPD2: pour ReSharper 2018.x ReSharper 2018.1

UPD3: pour ReSharper 2019.x ReSharper 2019.1

UPD4: pour ReSharper 2020.x entrez la description de l'image ici

Sergey G.
la source
35

Ryan a raison (notez cependant que son lien renvoie à l'aide de R # 2.0). La procédure spécifique est la suivante:

  1. Allez dans ReSharper> Options> Langues> C #> Style de mise en forme> Disposition des accolades
  2. Définissez "Accolades dans l'instruction" if-else "" sur "Utiliser des accolades pour la multiligne"
  3. Après avoir enregistré les modifications, sélectionnez une étendue à reformater (peut être une sélection de code, un fichier, un dossier, un projet, une solution - tout ce que vous voulez).
  4. Choisissez ReSharper> Outils> Code de nettoyage.
  5. Profit.

N'oubliez pas que Code Cleanup fait de nombreuses choses et qu'elles ne sont pas uniquement liées au formatage du code (voir les détails à http://www.jetbrains.com/resharper/webhelp/Code_Cleanup__Index.html ), alors utilisez la fonctionnalité à bon escient.

Jura Gorohovsky
la source
28

La solution de Gorohoroh est proche, mais au lieu de sélectionner "Utiliser des accolades pour multiligne", j'ai dû sélectionner "Ajouter des accolades" pour le forcer à ajouter des accolades dans le scénario sur une seule ligne. Et j'ai dû définir cela dans les six listes déroulantes sous "Force Braces" pour capturer tous les scénarios:

texte alternatif

Ce que j'espérais vraiment, c'était pouvoir configurer ReSharper pour qu'il fasse un avertissement jaune ou une erreur rouge lorsque la règle était violée, mais je n'ai pas trouvé de moyen de le faire. Parce que vous avez raison, Gorohoroh, Cleanup Code fait beaucoup de choses et j'aimerais avoir la possibilité de regarder et de corriger les violations de règles une par une.

Merci de votre aide!

Booberry
la source
8

Pour ReSharper 2016.2.2 .

Vous devez modifier votre profil pour le nettoyage. L'élément approprié est appelé Ajouter / Supprimer des accolades pour les instructions simples dans "if-else", "for", "foreach", "while", "do-while", "using" . Cet élément se trouve dans l'élément C # => Styles de code .

Si l'élément est coché, des accolades seront ajoutées; si elle n'est pas cochée, les accolades seront supprimées.

Remarque: l'ajout ne fonctionne pas maintenant (je ne sais pas pourquoi - peut-être une version trop récente de ReSharper). Cependant, si vous décochez l'élément mentionné, les accolades existantes autour des instructions simples ne seront pas supprimées.

UPD: Le problème est résolu, voir les deux premiers commentaires sous ce post.

Jordan
la source
2
Cela fonctionne un peu différemment dans 2016.3.2 - sous Options, allez dans Édition de code -> C # -> Styles de code -> Accolades -> Dans l'instruction «Si» , puis choisissez «Appliquer toujours» sous Préférence. Les autres options sont "Ne pas appliquer", "Appliquer si le corps est multiligne", "Appliquer si l'instruction est multiligne", etc.
Chait
Agréable. Je vous remercie! Et après ces réglages, le nettoyage décrit par moi fonctionne correctement.
Jordanie
1

Vous pouvez le configurer comme indiqué sur la capture d'écran.

forcer les accolades pour une seule ligne de code

PS: pour ceux qui ont du mal à voir les urls Imgur.com -> https://ibb.co/b4xijT

Alper Ebicoglu
la source
1

Juste si cela peut aider quelqu'un d'autre à gagner du temps, sur une machine de mon entreprise, suivre les conseils de Sergey n'était pas suffisant malgré la grande qualité de son poste.

Sur la configuration concernée (VS2017, R # 2019, tous deux à jour), ces paramètres côté R # étaient déjà bons, mais j'ai également dû le modifier dans les options de Visual Studio:

  • Dans la fenêtre Options, allez dans Éditeur de texte -> C # -> Style de code -> Formatage -> Général ,
  • Cochez " Effectuer un nettoyage de code supplémentaire pendant le formatage " et " Ajouter / supprimer des accolades pour l'instruction de contrôle sur une seule ligne "
AFract
la source
0

Eh bien, il est à nouveau déplacé. Le nouvel endroit est sous le style de syntaxe sur la version ReSharper 2020.01.

Aller à ReSharper > Options > Code Editing > C# > Syntax Style > Braces

Voici la capture d'écran de ReSharper 2020.01

entrez la description de l'image ici

curieux
la source