Intellij IDEA 13: Yeniden düzenleme yorumlarını ve dizelerini nasıl devre dışı bırakırım?


89
public class KV<K, V> {
    public K key;
    public V value;
    public KV(K key, V value) {
        this.key = key;
        this.value = value;
    } 
}

valueYerinde gerçekleşen sınıf değişkenini yeniden düzenlemeye çalışıyorum . Bu, hiçbir iletişim kutusunun açılmadığı anlamına gelir; Enter tuşuna basıyorum ve yorumlar ve olmayanlar dahil olmak üzere tüm proje boyunca yeniden düzenleme yapmaya çalışıyor:

<%--<link href="<c:url value="../core/core.css" />" />--%>

.jsp dosyasında. Bu, tüm proje genelinde eşleşen yorumları yeniden düzenlemeye çalışmak için fazla "zekice" . Bu genellikle çok sayıda hata riskine neden olur ve Java ortamında yeniden düzenleme artık güvenli değildir.

Aynı şey Intellij 12'de de meydana geliyordu. Cidden, güvensiz kabul edilen herhangi bir şeyi tavsiye etmek için Intellij'e ihtiyacım yok veya aynı şey olduğundan emin değilim!

Yeniden düzenlemeleri hariç tutabilirim, ancak her seferinde beş "öneriyi" değerlendirmek için zamanım yok. Bu sadece insan hatası olasılığını artırıyor: çoğu zaman sadece enter tuşuna basıyorum ve işler yeniden yapılandırılıyor.

Yeniden düzenleme, Java ortamında bazen .js dosyalarındaki şeyleri değiştirmeye çalıştığında da önemli bir sorundur. Cidden, bu sona ermeli.

Açılır pencere iletişim kutusu olmadan, "arama dizeleri" nin işaretini kaldıramıyorum. Bu işaretlenmiş olsa bile, Intellij , özellikle mevcut dosyanın dışındayken, önerileri hiçbir zaman varsayılan olarak içermemelidir. Bunları yeniden düzenlemeyi de önerebilir, ancak varsayılan olarak hariç tutulmaları gerekir. Yani, varsayılan olarak her şeyi yok etmek yerine tercihe bağlı bir özellik olmalıdır.

Bu, daha yakın tarihli "akıllı" Intellij yeniden düzenleme ile ilgili ciddi bir kullanıcı deneyimi sorunudur. JS dosyalarını yeniden düzenlerken, Java dosyalarında yorumlar veya dizeler aramak istemiyorum! Dönem! Ve tam tersi!

Güvenlik önce gelir! Ne yaptıklarını bilen geliştiriciler, gerekirse dizeleri kendileri arayacaktır. Dinamik bir dil ortamında, Intellij'i kullanmayı imkansız kılar, çünkü sıklıkla ve herhangi bir net model olmadan, bazen yeniden düzenlemeler geçer, bazen proje boyunca şeyleri değiştirir ve ne değiştirmez.

Özellikle dinamik diller için, "Yalnızca bu dosyaya göre veya% 100 çıkarsama yapıldığında yeniden düzenleyin!" Diyen bir seçenek olmalıdır! Statik diller için, dosyanın dışındaki yorumları ve dizeleri aramaya bile çalışmamalıdır.

Kamuoyuna duyurmak istemedim, ancak bu konuyu 2 yıldan fazla bir süre önce bugtracker'da gündeme getirdim, ancak kimse dikkat etmedi.

DÜZENLE

Uzağa gidebileceğimi düşünenler için şunu denedim:

Bu sınıfla:

public class KV<K, V> {
    public K key;
    public V val;
    public KV(K key, V val) {
        this.key = key;
        this.val = val;
    }
}

Ve bunu herhangi bir Java sınıfına eklemek , örneğin:

public class CoreConfig {
    String abc = "kv.val";
    String def = "somethingElse.val";
}

Daha KV.valönce olduğu gibi yeniden düzenleme yaparken , aşağıdaki önerileri alıyorum, felaketten bir GİRİŞ ve her seferinde birini değerlendirip hariç tutmam gereken bir şey. Çaba gerektirir ve sinir bozucu ve risklidir. Sanki biri bağırıyor, DUR! Ve sonra ooh, bir dakika sonra hiçbir şey, hayal kırıklığı ve 1000 uzun kelimelik bir deneme (bu).

görüntü açıklamasını buraya girin

Cidden, bu tür riskli davranışları devre dışı bırakmanın bir yolu var mı? Ve bunun varsayılan olarak açık olmasının herhangi bir nedeni var mı?

DÜZENLE 20200706

İşler 2020'de de devam ediyor: https://youtrack.jetbrains.com/issue/IDEA-245370


5
Intellij bana zorlanan şeylerle dolu. Android diğer düzenleyicileri destekliyorsa, bir kalp atışında geçiş yapardım. Kendimi kodlamaya zaman harcamak yerine editörle savaşırken buluyorum. Burada işleri kapatmanın bir yolunu bulmaya çalışıyorum. Çoğu zaman çözüm önermiyorlar. Çoğu zaman diyorlar ki ... "NEDEN BU ÖZELLİKTEN NEDEN NEFRET EDİYORSUN?"
TatiOverflow

1
En azından bu özelliğin bir minimum uzunluk sınırına sahip olması gerekir - örneğin, ortak bir 3 harfli adı olan bir değişkeni yeniden düzenliyorsam , varsayılan olarak dizelerde ve yorumlarda bunu aramak ve değiştirmek sıfır mantıklıdır . Bu 3 harfli dizinin, büyük bir projeyse, rastgele bir dizede bulunma olasılığı çok yüksektir. Ugh.
Vicky Chijwani

1
Artık sade ve basitçe kırılmış. Bir zamanlar mantıklı olan tek IDE idi. Bu korkunç varsayılan davranışı kapatamamak, IntelliJ'i kullanması çok kötü bir araç haline getiriyor, IntelliJ'in yıllarca bana verdiği gibi değişkenleri yeniden adlandırarak bilmeden görünüşte ilgisiz korkunç hatalar yarattım ... Yapabileceğimi unutup duruyorum ' t onun yeniden yapılandırılmasına artık güvenmiyorum -.-
yeoman

1
Bugün, bir Spring MVC POST eşlemesinin yolunu değiştirdi çünkü sınıfı farklı bir pakete taşıdım (!!!!!!!)
yeoman

1
Evet, bu istihbaratın en kötü özelliklerinden biridir. Bir sınıfı yeniden adlandırmak istersem, sınıf adının dizelerde göründüğü tüm projeyi sonlandırabilirim. Sınıfa adlandırmak Yani eğer Userhiç MyUserbu yapılandırma dosyalarına, etiketler, URL'ler, dinlenme aramalar eşlemenizde yolları ... dahil her şeyi yeniden adlandırır
ACV

Yanıtlar:


100

Shift + F6 (Refactor Rename)İki kez bastığınızda , iletişim kutusunu açar ve "Yorumlarda ve dizelerde ara" seçeneğini devre dışı bırakabilirsiniz.


9
Açık olmak gerekirse, bu "Refactor Rename" kısayolunu İKİ KEZ etkinleştiriyor. Anahtar eşlemenize bağlı olarak farklı bir kombinasyon olabilir.
Kris Erickson

4
Teşekkürler, iyi olmasına rağmen, yerinde yeniden düzenleyiciyi de devre dışı bırakabileceğinizi gördüm, çünkü bu her zaman güvenli olan gibi geliyor. Gönderimin ana amacı, yorum ve dizge aramasının küresel olarak kapatılması gerektiğini vurgulamaktı. Başka bir sınıftaki bir değişkendeki değeri değiştirmeye çalışmasının hiçbir anlamı yoktur. Akıllı değil. Zeka veya Yapay Zeka, doğru olma olasılığını artırarak, bir şekilde hata payına sahip olmasına izin verildiğini varsaydığında bir sorun vardır. Paket adı tam olarak mevcut olmadığı sürece XML dosyalarını içermesi gereken katı java yeniden düzenlemeleri istiyorum
mmm

1
Ancak ayarları hatırladığından, bunda bir sorun görmüyorum. Neye ihtiyacınız olduğuna bağlı olarak, tam metin yeniden düzenlemeyi kullanabilir veya kullanmayabilirsiniz.
Meo

3
Ne yazık ki, onay kutusu ara sıra yeniden beliriyor gibi görünüyor. Bunu kalıcı olarak kapatacak bir ayar bilen var mı? Daha önce de belirtildiği gibi, IntelliJ burada kendi iyiliği için fazla "akıllı" ...
Erk

@Meo buna her yerde saygı duymuyor. Günümüzde, javascript'te satır içi, kod içi metin yeniden düzenleme, işlevde bile değil koddaki değerleri ve yorumları değiştiriyor.
mmm

8

Ve bunun varsayılan olarak açık olmasının herhangi bir nedeni var mı?

Evet var. İnsanlar bugünlerde çok fazla DSL, şablon ve dil enjeksiyonu kullanma eğiliminde. Düz eski Java'da tüm bunlar esas olarak Dizeler olarak var olur. Reflection API ayrıca bir String olarak yöntem / sınıf adını temsil eder. Herhangi bir IDE'nin hepsini desteklemesi ve tanıması mümkün değildir, bu nedenle olası yeniden düzenleme hatalarına karşı size bir güvenlik ağı sağlamak en iyisidir. Mükemmel bir birim testi kapsamınız varsa, muhtemelen burada güvendesiniz.

Yorumlara gelince, genellikle kod örnekleri içerirler. Bu kod yığınları, yeniden adlandırma sırasında hızla geçersiz hale gelir, bu nedenle IDE size bunların varlığını hatırlattığında yararlı olur.

Elbette bu kontrol bazen yanlış pozitiflerle sonuçlanır. Bununla birlikte, değişkenlerinize açıklayıcı adlar veriyorsanız ("var" veya "val" demek istemiyorum), bu olası değildir. Yani, IDE sizi bir şekilde daha iyi bir kod stiline doğru itiyor.

Hala ikna olmadıysanız, @Meo'nun tavsiyesine uyun ve dizelerde ve yorumlarda aramayı devre dışı bırakın.


9
Evet, bu iyi bir öneri. Ancak onun hakkında yorum yaptığım gibi, zeka veya yapay zeka, doğru olma olasılığını artırarak, bir şekilde hata payına sahip olmasına izin verildiğini varsaydığında bir sorun var. Tüm paket adı mevcut olmadığı sürece XML dosyalarını içermesi gereken katı java yeniden düzenlemeleri istiyorum ve o zaman bile bildirim almak istiyorum. Yeniden düzenleme sonuçları önce yorumları ve dizeleri listelememeli ve varsayılan olarak hariç tutmalıdır. Daha az kullanıcı dostu hale geldi ve beni öne doğru eğilmeye zorlayan ve gözlerimi yoran odaklanmamı gerektiriyor.
mmm

2
Bu, sıkışık bir telefon numarasını almaya çalışmak gibidir. Bu numarayı tekrar edebilir misin: 392314213343234295423442? Benim için aynı türden bir çaba ve kesinlikle diğerleri için. Umarım Intellij çalışanları bunu alır ve bize bunu kapatma seçeneği sunar.
mmm

10
"Yine de mükemmel bir birim testi kapsamınız varsa, o zaman muhtemelen burada güvendesiniz" - bu bize Java'yı dinamik bir dil olarak gören bir IDEA sunmak için bir bahane değildir. Dinamik bir dil isteseydim Groovy'de kod yazardım. "Değişkenlerinize açıklayıcı adlar veriyorsanız (" var "veya" val "değil demek istiyorum)" - Yine de çarpışma riski var. Bize eskiden Eclipse ve Intellij'in sunduğu gibi "Katı" bir Java modu / seçeneği verin.
mmm

5
Bir yanlış tıklama ve Symfony'nin çerçevesini sileceğim. "Varsayılan olarak hariç tutabilmeliyiz".
Nicolas Zozol

3
Bununla da karşılaştım. Sahip olmak kesinlikle tehlikeli bir varsayılan ve birkaç kez 'değer' gibi şeyleri yeniden adlandırma ve bir projeye verilebilecek destansı hasarı hemen fark etmeme hatası yaptım.
Jilles van Gurp
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.