Java kodunun belirli bölümleri için Eclipse kod biçimlendiricisini nasıl kapatabilirim?


488

Java dizeleri olarak yazılmış SQL deyimleri ile bazı Java kodu var (lütfen hiçbir OR / M flamewars, gömülü SQL ne olduğunu - benim kararım değil).

Ben bakım kolaylığı için kod birkaç satır üzerinden birkaç bitmiş dizeleri içine semantik SQL ifadeleri kırık ettik. Yani şöyle bir şey yerine:

String query = "SELECT FOO, BAR, BAZ FROM ABC WHERE BAR > 4";

Benim gibi bir şey var:

String query =
    "SELECT FOO, BAR, BAZ" +
    "  FROM ABC          " +
    " WHERE BAR > 4      ";

Bu stil, özellikle büyük sorgular için SQL'in okunmasını ve bakımını (IMHO) kolaylaştırır. Örneğin, düzenleyicimi "üzerine yazma" moduna geçirebilir ve metni yerinde kolayca değiştirebilirim.

Bu sorunun belirli bir SQL örneğinin ötesinde genelleştirildiğini unutmayın. Herhangi bir dikey biçimlendirmeyle yazılmış kodlar, özellikle tablo yapıları, güzel bir yazıcı tarafından imha edilebilir.

Şimdi, bazı proje üyeleri Eclipse düzenleyicisini kullanıyor ve anlamsal biçimlendirme genellikle tüm kaynak dosyayı biçimlendirdiklerinde yok ediliyor.

Eclipse'e biçimlendirme ile ilgili belirli kaynak satırlarını yoksayması talimatı vermenin bir yolu var mı?

Eclipse biçimlendiricisini değiştiren özel bir yorum gibi bir şey arıyorum. İdeal olarak, böyle bir yorum seçtiğimiz şekilde yapılandırılabilir ve diğer formatlayıcılar da ona saygı gösterecek şekilde programlanabilir:

// STOP-ECLIPSE-FORMATTING
String query =
    "SELECT FOO, BAR, BAZ" +
    "  FROM ABC          " +
    " WHERE BAR > 4      ";
// START-ECLIPSE-FORMATTING

Açıkçası, bir "çözüm", ekip üyelerimizin Jalopy veya JIndent gibi bazı dış biçimlendiricilerde standart hale getirmelerini sağlamaktır , ancak bu sorunun konusu bu değildir (ayrıca, bu projedeki kararım değil): Özellikle Eclipse formatlayıcıdan geçici olarak kaçının.

İdeal olarak, bir çözüm Eclipse kullanan ekip üyelerinin herhangi bir IDE yeniden yapılandırması yapmasını gerektirmeden Eclipse formatlayıcı için talimatlar eklememe izin verecektir (muhtemelen bir formatter agnostik komut yorumu seçmekten başka: STOP-ECLIPSE-FORMATTINGSTOP-FORMATTING).


1
Bu sorunu yaşadık. Eclipse , dizenin sonraki bitinin satıra sığıp sığmayacağına bakılmaksızın, bir + dizesinin bulunduğu bir String yapıcısında her zaman bir satırı bölme seçeneğine sahip olmalıdır . Ama öyle değil. :-(
JeeBee

Görünüşe göre bu özellik Eclipse 3.6M6'ya eklendi: bugs.eclipse.org/bugs/show_bug.cgi?id=27079
Guillaume

Not: Tutulmanın yorumlarınızı karıştırmasını önlemek istiyorsanız, her satırın önünde // kullanabilirsiniz. Bir bloğa yorum yapmak için Ctrl + / tuşlarına basın.
John Henckel

Şimdi 10 yıl sonra, Java 14'ün çok satırlı dizeler getireceğini unutmayın.
Thorbjørn Ravn Andersen

Yanıtlar:


865

Eclipse 3.6, özel bir yorum ekleyerek biçimlendirmeyi kapatmanıza olanak tanır.

// @formatter:off
...
// @formatter:on

Açma / kapama özellikleri Eclipse tercihlerinde "açık" açık olması gerekiyor: Java > Code Style > Formatter. Tıklayın Edit, Off/On Tagsetkinleştirmek Enable Off/On tags.

Tercihlerdeki sihirli dizeleri değiştirmek de mümkündür - Eclipse 3.6 belgelerine buradan göz atın .

Daha fazla bilgi

Java > Code Style > Formatter > Edit > Off/On Tags

Bu tercih, devre dışı bırakılacak bir etiketi ve biçimlendiriciyi etkinleştirmek için bir etiket tanımlamanızı sağlar (biçimlendirici profilinizdeki Kapalı / Açık Etiketler sekmesine bakın):

resim açıklamasını buraya girin

Ayrıca, Java Formatting


7
Bu sayfanın başka bir bölümünde belirtilen "Asla satırlara katılma" seçeneği de çok kullanışlıdır.
12p12

89
Açma / kapama özellikleri "açık" olmalıdır. Eclipse tercihlerinde: Java> Kod Stili> Formatlayıcı. "Düzenle" düğmesini, "Kapalı / Açık Etiketleri" ni tıklayın, "Kapalı / Açık etiketleri etkinleştir" i işaretleyin.
Domenic D.

2
Bu, biçimlendirme ile ilgili tam tersi bir sorunum olduğu JavaScript Kod Stili tercihlerinde mevcut değildir . :(
Redsandro

11
Takımlar, Eclipse tercihlerinin (dosya) bir kopyasını wiki'lerine vermeli ve herkesin aynı olanı kullanmasını şart koşmalıdır. Bizim için iyi çalışıyor. ;)
Joseph Lust

Bilginize // Çalışmak için // ve @ işareti arasındaki boşluğu kaldırmak zorunda kaldım.
Roy Truelove

61

Biçimlendiricideki Eclipse 3.5 M4'ten gelen AFAIK'te, kullanıcı satır sonlarını koruyan "Asla Hatlara Katılma" seçeneği vardır. Belki de istediğini yapar.

Yoksa bu çirkin kesmek var

String query = //
    "SELECT FOO, BAR, BAZ" + //
    "  FROM ABC"           + //
    " WHERE BAR > 4";

1
Yani "Birleşim çizgileri asla" seçeneğini ayarlayarak ek olarak ben de bu "hayali" bir yorum yazmak zorunda? "Asla Hatlara Katıl" kısmı kendi başına çalışmamalı mı?
Greg Mattes

2
Evet, elbette olmalı. Hayali yorumlar alternatif bir yaklaşımdır (yoksa veya daha eski bir sürümle sıkışıp kalmanız durumunda).
Chris

Bu yaklaşımı, eski SQL'i JAVA kodundan çıkarmak, yeniden biçimlendirmek ve tüm gereksiz yorumları almak ve sonra tekrar JAVA'ya atmak için TOAD'da özel bir biçimlendirme şablonu ile birlikte kullandım. Bu bir acıdır, ancak Java kodumuzu şimdi kaydetmemiz için otomatik biçimlendirmemize izin verilir. Önerin için teşekkürler!
jnt30

"Asla çizgi katılma" kontrol etmeden açma / kapama makroları benim için çalışmıyor - teşekkürler!
Christoffer Soop

28

SO ile ilgili bu cevaba bakınız .

Belirli blok yorumlarının biçimlendirmesini bastırmak için kullanabileceğiniz başka bir çözüm daha vardır. /*-Blok yorumun başlangıcında (tire işaretini kullanın) kullanın ; dosyanın geri kalanını biçimlendirirseniz biçimlendirme etkilenmez.

/*-
 * Here is a block comment with some very special
 * formatting that I want indent(1) to ignore.
 *
 *    one
 *        two
 *            three
 */

Kaynak: Oracle'daki belgeler .


2
Kullanıcının IDE'sinin yapılandırmasına bağlı olmadığından bu en iyi yanıttır. Teşekkürler.
Azim

26

Biçimlendirmeyi kapatmak yerine, önceden sarılmış satırlara katılmayacak şekilde yapılandırabilirsiniz. Jitter cevabına benzer şekilde, Eclipse STS için de burada:

Özellikler → Java Kod Stili → Biçimlendirici → Projeye özgü ayarları etkinleştir VEYA Çalışma Alanı Ayarlarını Yapılandır → Düzenle → Satır Sarma (sekme) → "Asla sarılmış satırlara asla katılma" seçeneğini işaretleyin

Kaydet, uygula.

resim açıklamasını buraya girin


1
Bu SQL örneği gibi şeyler için yardımcı olacağını düşünüyorum, ama genel IDE biçimlendirici devre dışı bırakma genel durum için yeterli olacağını emin değilim.
Greg Mattes

2
Bu çözüm, oluşturucu kalıbını kullanırken mükemmeldir ve Java 8'de lambdaların tanıtımı ile alaka düzeyi kesinlikle artar
Jonas Kongslund

16

Formatlayıcı etiketlerini ekleme yeteneğini açmanız gerekir. Menubarda şu adrese gidin:

Windows Preferences Java Code Style Formatter

Düğmesine basın Edit. Son sekmeyi seçin. Açık / Kapalı kutusuna dikkat edin ve bir onay kutusuyla etkinleştirin.


14

Artı işaretini satırın başına koyarsanız, farklı biçimlendirir:

String query = 
    "SELECT FOO, BAR, BAZ" 
    +    "  FROM ABC"           
    +    " WHERE BAR > 4";

1
Bu ilginç bir uzlaşma olabilir. Genel olarak, bir aracın istenmeyen davranışlarından dolayı kodun biçimlendirmesini çok fazla değiştirmek istemiyorum. Bu durumda, dize birleştirme işleçleri SQL'de olup bitenlerin özünden ziyade bir kazadır. Bu yüzden onları her satırın sonuna yazmayı tercih ediyorum. SQL satırın başlangıcı olarak vurgulanması gerektiğini hissediyorum. Ancak bu, istediğim biçimlendirmeyi korumama izin veren bir çözümün bulunmaması için iyi bir yol olabilir. Teşekkürler!
Greg Mattes

8
Rica ederim. Aslında, + işaretlerimi yıllardır çizgilerin önüne koyuyorum ve biçimlendiriciyi kandırmıyorum. Onları ön tarafta tercih ederim, çünkü olanları bana daha açık hale getiriyor: bir çizginin sonunda olan şeyler bazen kayboluyor. Odun yakan derleyicileri kullandığımızda proje standardı bir yerdi ve bana yapıştı.
CPerkins

5

Ben biçimlendirici benim SQL dize girintisi kadar karışıklık önlemek için sabit genişlik dize parçaları (boşluk ile yastıklı) kullanıyorum. Bu size karışık sonuçlar verir ve boşlukların SQL'de olduğu gibi göz ardı edilmediği, ancak yardımcı olabileceği yerlerde çalışmaz.

    final String sql = "SELECT v.value FROM properties p               "
            + "JOIN property_values v ON p.property_id = v.property_id "
            + "WHERE p.product_id = ?                                  "
            + "AND v.value        IS NOT NULL                          ";

5

Satırların her birini çift eğik çizgi "//" ile bitirin. Bu, tutulmanın hepsini aynı hatta taşımasını engelleyecektir.


4

Alternatif yöntem: Eclipse 3.6'da, "Satır Sarma" ve ardından "Genel Ayarlar" altında "Asla sarılmış satırlara asla katılma" seçeneği vardır. Bu, biçimlendiricinin uzun satırları saracağı, ancak zaten sahip olduğunuz herhangi bir sargıyı geri almayacağı anlamına gelir.


4

@xpmatteo, kod bölümlerini devre dışı bırakma cevabına sahiptir, ancak buna ek olarak, varsayılan tutulma ayarları tüm dosya yerine yalnızca düzenlenmiş kod satırlarını biçimlendirecek şekilde ayarlanmalıdır.

Preferences->Java->Editor->Save Actions->Format Source Code->Format Edited Lines

Bu, iş arkadaşlarınızın aslında değiştirmedikleri kodu yeniden biçimlendirdikleri için ilk etapta olmasını engellerdi. Bu, kaynak kontrolünüzde fark yaratmayan aksaklıkları önlemek için iyi bir uygulamadır (küçük format ayarı farklılıkları nedeniyle tüm dosya yeniden biçimlendirildiğinde).

Ayrıca, açma / kapama etiketleri seçeneği kapatılırsa yeniden biçimlendirmeyi de önler.


2

//Yeni çizgiler istediğiniz yere ekleyerek hayali yorumlar harika!

  1. @Formatter: off, koddan düzenleyiciye bir başvuru ekler. Kod, bence, böyle referanslara sahip olmamalıdır.

  2. Hayali yorumlar (//) kullanılan biçimlendirme aracından bağımsız olarak çalışır. Eclipse, InteliJ veya kullandığınız herhangi bir düzenleyiciden bağımsız olarak. Bu, çok güzel Google Java Biçimi ile bile çalışır

  3. Hayali yorumlar (//) uygulamanızın her yerinde çalışır. Ayrıca Javascript'iniz varsa ve JSBeautifier gibi bir şey kullanabilirsiniz . Javascript'te de benzer kod stiline sahip olabilirsiniz.

  4. Aslında, büyük olasılıkla biçimlendirme istiyor musunuz? Karışık sekmeyi / boşluğu ve sondaki boşlukları kaldırmak istiyorsunuz. Satırları kod standardına göre girinti yapmak istiyorsunuz. DONT istediğin uzun bir çizgi. Bu ve sadece bu, hayalet yorumunun size verdiği şeydir!


-3

Bu kesmek işe yarıyor:

String x = "s" + //Formatter Hack
    "a" + //
    "c" + //
    "d";

Formatlayıcıyı kullanmamanızı öneririm. Kötü kod yapay olarak iyi değil kötü görünmelidir. İyi kod zaman alır. Kaliteyi aldatamazsınız. Biçimlendirme, kaynak kodu kalitesinin bir parçasıdır.


8
Formatlayıcıyı kullanmamak sadece kötü bir fikirdir; biçimlendirici hataları yakalamaya yardımcı olur ve kodu tutarlı bir durumda tutar.
Francis Upton IV

İlginç bir öneri, ama biçimlendirmenin bize kodun iyi olup olmadığını nasıl söylediğini göremiyorum.
Chris

2
Söylediği şey, kötü yazılmış, kötü biçimlendirilmiş kodun "geliştirmek" umuduyla biçimlendirmekten ziyade olduğu gibi tutulması gerektiğini düşünüyor. Yetersiz yazılmış, kötü biçimlendirilmiş kod, bir şekilde kolayca tanımlanabilmesi için "dışarı çıkmalıdır". Tamamen katıldığımdan emin değilim, ama bence bu fikir.
Greg Mattes

1
@Francis - Hata: Otomatik olarak biçimlendirilmiş kod bulma hataları nasıl? Tutarlılık: Tutarlılık hoş bir argümandır, ancak genel kod kalitesi daha önemlidir. Hamburger çevirme için güzel ve tutarlı bir süreç tanımlayabilirsiniz, ancak asla haute cuisine için işe yaramaz. Bir yemek yapmak, yeterince gerçekleri görmezden gelirseniz, oldukça karmaşık bir etkinlik veya önemsiz olabilir. Yazılım geliştirmenin hamburger çevirme araçları gibi olduğunu düşünüyorsanız, tutarlılığı zorlayan sizin için. Bu, kılavuz çizgilerini biçimlendirmeye karşı bir argüman değildir, ancak geliştiriciler bu yönergeleri önemsemezlerse, diğer temel unsurları önemsemezler.
Thomas Jung

4
Buradaki argümanım: İyi kod yazıyorum ve biçimlendirme kılavuz satırlarına sadık kalıyorum. Ama ben tembelim. Beş özensiz kod satırımı yazabileceğim, format düğmesine basabildiğim ve mutlu olabileceğimde neden doğru miktarda boşluk ve satır sonu eklemeliyim? Sonucu her zaman mükemmel olmasını sağlayan aracımı kullanarak kodu biçimlendirdikten sonra, biçimlendirme hakkında herkes kadar nazi olduğumu. Biçimlendirme sadece bir kestroke uzaksa, kılavuz çizgilere (özellikle kötü olabilecekleri) yapışmamaya karşı HİÇ bir argüman yoktur. Tüm proje üyeleri aynı kod biçimlendirme ayarlarını paylaşır.
Wiklander başına
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.