ReSharper - memaksa tanda kurung kurawal di sekitar satu baris

101

Dapatkah saya mengkonfigurasi ReSharper untuk memperbaiki kode C # ketika tanda kurung kurawal tidak digunakan untuk mengelilingi blok kode baris tunggal, seperti ini:

if (blnSomeCondition)
   DoSomething();  // complain

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

Terima kasih

Booberry
sumber
3
Pertanyaan bagus, tapi apa yang salah dengan sintaks pertama? Curl braces tidak diperlukan.
Mikha
43
Beberapa pengembang berpendapat bahwa praktik yang lebih baik untuk memasukkan tanda kurung kurawal di sekitar blok kode baris tunggal karena itu bisa lebih mudah dibaca dan lebih mudah dipelihara.
Ryan Berger
33
Selain itu, saya telah melihat berapa kali tidak menggunakan kawat gigi keriting menyebabkan bug. Seseorang membuat perubahan, melihat if dan menambahkan baris baru, tidak menyadarinya tidak akan dieksekusi sebagai bagian dari kondisional. Ini halus tetapi telah terjadi.
Hadi Hariri
2
Saya tidak terlalu punya masalah dengan format pertama, tapi saya bisa melihat bahwa itu bisa menyebabkan bug dalam skenario yang disebutkan Hadi. Tim kami telah memutuskan bahwa itu adalah standar pengkodean yang ingin kami terapkan, itulah sebabnya saya mengajukan pertanyaan.
Booberry
5
Preferensi pribadi saya adalah tidak menggunakan tanda kurung untuk satu baris 'jika', tetapi untuk menempatkan 'jika' dan pernyataan berikut ke dalam garis fisik yang sama, misalnya 'jika (blnSomeCondition) Lakukan Sesuatu ();'.
Paul Ruane

Jawaban:

148

Dalam versi baru ReSharper (2016.x) telah dipindahkan ke Code Style. ReSharper 2016.1.1

UPD1: untuk ReSharper 2017.x ReSharper 2017.1.2

UPD2: untuk ReSharper 2018.x ReSharper 2018.1

UPD3: untuk ReSharper 2019.x ReSharper 2019.1.0

UPD4: untuk ReSharper 2020.x masukkan deskripsi gambar di sini

Sergey G.
sumber
35

Ryan benar (perhatikan bahwa tautannya mengacu pada bantuan R # 2.0). Prosedur spesifiknya adalah sebagai berikut:

  1. Masuk ke ReSharper> Opsi> Bahasa> C #> Gaya Pemformatan> Tata Letak Kurung
  2. Setel "Braces in" if-else "statement" ke "Use braces for multiline"
  3. Setelah menyimpan perubahan, pilih ruang lingkup untuk diformat ulang (bisa berupa pemilihan kode, file, folder, proyek, solusi - apapun yang Anda inginkan).
  4. Pilih ReSharper> Alat> Kode Pembersihan.
  5. Keuntungan.

Ingatlah bahwa Pembersihan Kode melakukan banyak hal dan tidak hanya terkait dengan pemformatan kode (lihat detailnya di http://www.jetbrains.com/resharper/webhelp/Code_Cleanup__Index.html ), jadi gunakan fitur dengan bijak.

Jura Gorohovsky
sumber
28

Solusi Gorohoroh sudah dekat, tetapi alih-alih memilih "Gunakan kawat gigi untuk multiline", saya harus memilih "Tambahkan kawat gigi" untuk memaksanya menambahkan kawat gigi dalam skenario baris tunggal. Dan saya harus menyetelnya di keenam dropdown di bawah "Force Braces" untuk menangkap semua skenario:

teks alt

Apa yang sebenarnya saya harapkan adalah dapat mengatur ReSharper untuk melakukan peringatan kuning atau kesalahan merah ketika aturan dilanggar, tetapi saya belum menemukan cara untuk melakukannya. Karena Anda benar, Gorohoroh, Kode Pembersihan melakukan banyak hal dan saya ingin memiliki opsi untuk melihat dan memperbaiki pelanggaran aturan satu per satu.

Terima kasih atas bantuan Anda!

Booberry
sumber
8

Untuk ReSharper 2016.2.2 .

Anda harus mengedit profil Anda untuk dibersihkan. Item yang tepat disebut Add / Remove braces untuk pernyataan tunggal di "if-else", "for", "foreach", "while", "do-while", "using" . Item ini dapat ditemukan dalam C # => Code styles .

Jika item dicentang, kawat gigi akan ditambahkan; jika tidak dicentang, kawat gigi akan dilepas.

Catatan: menambahkan tidak berfungsi sekarang (tidak tahu mengapa - mungkin, versi ReSharper yang terlalu baru).Namun, jika Anda tidak mencentang item yang disebutkan, tanda kurung yang ada di sekitar pernyataan tunggal tidak akan dihapus.

UPD: Masalahnya terpecahkan, lihat dua komentar pertama di bawah posting ini.

Yordania
sumber
2
Ini berfungsi di 2016.3.2 sedikit berbeda - di bawah Opsi, buka Pengeditan Kode -> C # -> Gaya kode -> Tanda kurung -> Dalam pernyataan "Jika" , lalu pilih "Terapkan selalu" di bawah Preferensi. Opsi lainnya adalah "Jangan terapkan", "Berlakukan jika isi multi-baris", "Terapkan jika pernyataan multi-baris", dll.
Chait
Bagus. Terima kasih! Dan setelah pengaturan ini, pembersihan yang saya jelaskan berfungsi dengan baik.
Jordan
1

Anda dapat mengkonfigurasinya seperti yang terlihat pada tangkapan layar.

memaksa tanda kurung kurawal untuk satu baris kode

NB: bagi yang mengalami masalah melihat url Imgur.com -> https://ibb.co/b4xijT

Alper Ebicoglu
sumber
1

Hanya jika itu dapat membantu orang lain untuk menghemat waktu, pada satu mesin perusahaan saya, mengikuti nasihat Sergey tidaklah cukup meskipun kualitas posnya bagus.

Pada pengaturan yang bersangkutan (VS2017, R # 2019, keduanya terbaru) pengaturan ini di sisi R # sudah bagus, tetapi saya juga harus memodifikasinya dalam opsi Visual Studio:

  • Di jendela Opsi, buka Editor teks -> C # -> Gaya kode -> Pemformatan -> Umum ,
  • Centang " Lakukan pembersihan kode tambahan selama pemformatan " dan " Tambahkan / hapus tanda kurung kurawal untuk pernyataan kontrol baris tunggal "
Latih
sumber
0

Nah itu dipindahkan lagi. Tempat baru berada di bawah Gaya Sintaks pada versiReSharper 2020.01 .

Pergi ke ReSharper > Options > Code Editing > C# > Syntax Style > Braces

Ini screen shotnya dari ReSharper 2020.01

masukkan deskripsi gambar di sini

penasaran
sumber