ReSharper: forza le parentesi graffe attorno a una singola riga


101

Posso configurare ReSharper per correggere il codice C # quando le parentesi graffe non vengono utilizzate per racchiudere un blocco di codice a riga singola, in questo modo:

if (blnSomeCondition)
   DoSomething();  // complain

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

Grazie


3
Bella domanda, ma cosa c'è di sbagliato nella prima sintassi? Le parentesi graffe non sono necessarie.
Michea

43
Alcuni sviluppatori sostengono che è meglio includere le parentesi graffe attorno a un blocco di codice a riga singola poiché può essere più leggibile e più gestibile.
Ryan Berger

33
Inoltre, ho visto quante volte il mancato utilizzo delle parentesi graffe ha portato a bug. Qualcuno apporta una modifica, vede l'if e aggiunge una nuova riga, non rendendosi conto che non verrà eseguita come parte del condizionale. È sottile ma è successo.
Hadi Hariri

2
Non ho davvero problemi con il primo formato, ma posso vedere che potrebbe portare a bug nello scenario menzionato da Hadi. Il nostro team ha deciso che si tratta di uno standard di codifica che desideriamo applicare, motivo per cui pongo la domanda.
Booberry

5
La mia preferenza personale è di non utilizzare le parentesi graffe per la singola riga "if's", ma di inserire "if" e la seguente istruzione sulla stessa riga fisica, ad esempio "if (blnSomeCondition) Do Something ();".
Paul Ruane

Risposte:


148

Nella nuova versione di ReSharper (2016.x) è stato spostato lo stile del codice. ReSharper 2016.1.1

UPD1: per ReSharper 2017.x ReSharper 2017.1.2

UPD2: per ReSharper 2018.x ReSharper 2018.1

UPD3: per ReSharper 2019.x ReSharper 2019.1

UPD4: per ReSharper 2020.x inserisci qui la descrizione dell'immagine


35

Ryan ha ragione (si noti tuttavia che il suo collegamento si riferisce alla guida R # 2.0). La procedura specifica è la seguente:

  1. Vai a ReSharper> Opzioni> Lingue> C #> Stile di formattazione> Layout parentesi graffe
  2. Imposta "Parentesi nell'istruzione" if-else "" su "Utilizza le parentesi graffe per multilinea"
  3. Dopo aver salvato le modifiche, seleziona un ambito da riformattare (potrebbe essere una selezione di codice, un file, una cartella, un progetto, una soluzione, qualsiasi cosa tu voglia).
  4. Scegli ReSharper> Strumenti> Codice di pulizia.
  5. Profitto.

Ricorda che Code Cleanup fa molte cose e non sono solo correlate alla formattazione del codice (vedi i dettagli su http://www.jetbrains.com/resharper/webhelp/Code_Cleanup__Index.html ), quindi usa la funzione con saggezza.


28

La soluzione di Gorohoroh è vicina, ma invece di selezionare "Usa parentesi graffe per multilinea" ho dovuto selezionare "Aggiungi parentesi graffe" per costringerla ad aggiungere le parentesi graffe nello scenario a riga singola. E ho dovuto impostarlo in tutti e sei i menu a discesa in "Force Braces" per catturare tutti gli scenari:

testo alternativo

Quello che speravo davvero era di poter impostare ReSharper per fare un avviso giallo o un errore rosso quando la regola è stata violata, ma non ho trovato un modo per farlo. Perché hai ragione, Gorohoroh, Cleanup Code fa un sacco di cose e mi piacerebbe avere la possibilità di esaminare e correggere le violazioni delle regole una alla volta.

Grazie per l'aiuto!


8

Per ReSharper 2016.2.2 .

È necessario modificare il profilo per la pulizia. L'elemento corretto è chiamato Aggiungi / Rimuovi parentesi graffe per singole istruzioni in "if-else", "for", "foreach", "while", "do-while", "using" . Questo elemento può essere trovato all'interno dell'elemento C # => Code styles .

Se l'elemento è selezionato, verranno aggiunte le parentesi graffe; se deselezionata, le parentesi graffe verranno rimosse.

Nota: l'aggiunta non funziona ora (non so perché, forse, una versione troppo recente di ReSharper). Tuttavia, se deselezioni l'elemento menzionato, le parentesi graffe esistenti attorno alle singole istruzioni non verranno rimosse.

UPD: Il problema risolto, vedi i primi due commenti sotto questo post.


2
Questo funziona in 2016.3.2 in modo leggermente diverso: in Opzioni, vai a Modifica codice -> C # -> Stili codice -> Parentesi graffe -> Nell'istruzione "If" , quindi seleziona "Applica sempre" in Preferenze. Altre opzioni sono "Do not enforce", "Enforce if body is multi-line", "Enforce if statement is multi-line", ecc.
Chait

Bello. Grazie! E dopo queste impostazioni, la pulizia descritta da me funziona correttamente.
Jordan


1

Solo se può aiutare qualcun altro a risparmiare tempo, su una macchina della mia azienda, seguire i consigli di Sergey non è stato sufficiente nonostante la grande qualità del suo post.

Sulla configurazione interessata (VS2017, R # 2019, entrambi aggiornati) queste impostazioni sul lato R # erano già buone, ma ho anche dovuto modificarle nelle opzioni di Visual Studio:

  • Nella finestra Opzioni, vai a Editor di testo -> C # -> Stile codice -> Formattazione -> Generale ,
  • Seleziona " Esegui pulizia aggiuntiva del codice durante la formattazione " e " Aggiungi / rimuovi parentesi graffe per l'istruzione di controllo a riga singola "

0

Ebbene si è spostato di nuovo. Il nuovo posto è sotto lo stile di sintassi nella versione ReSharper 2020.01.

Vai a ReSharper > Options > Code Editing > C# > Syntax Style > Braces

Ecco la schermata di ReSharper 2020.01

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.