Intellij IDEA 13: як відключити коментарі та рядки рефактора?


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

Я намагаюся здійснити рефакторинг змінної класу value, що відбувається на місці. Це означає, що діалогове вікно не з’являється; Я натискаю клавішу Enter, і вона намагається здійснити рефакторинг по всьому проекту, включаючи коментарі, а також ні, зокрема:

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

у файлі .jsp. Це занадто «розумно», щоб намагатися рефакторингувати коментарі, які відповідають усьому проекту. Це часто спричиняє багато помилок, і рефакторинг у середовищі Java перестає бути безпечним.

Те саме траплялося в Intellij 12. Серйозно, мені не потрібен Intellij, щоб рекомендувати щось, що вважається небезпечним, або коли не впевнений, що це те саме!

Я можу виключити рефакторинг, але у мене немає часу щоразу оцінювати п'ять "пропозицій". Це просто підвищує ймовірність людської помилки: більшу частину часу я просто натискаю клавішу Enter і обробляю речі реконструйованими.

Рефакторинг також є основною проблемою в середовищі Java, коли він іноді намагається замінити речі у файлах .js. Серйозно, це повинно зупинитися.

Без діалогового вікна, що спливає, я не можу зняти позначку "рядки пошуку". Навіть якщо це було позначено, Intellij ніколи не повинен включати пропозиції за замовчуванням, особливо коли це поза поточним файлом. Він може порекомендувати їх також переробляти, але за замовчуванням їх слід виключити. Тобто, це повинна бути функція, яку ви приймаєте, а не за замовчуванням знищувати все.

Це серйозна проблема взаємодії користувачів із недавнім так званим "розумним" рефакторингм Intellij. Під час рефакторингу файлів JS я не хочу шукати у файлах Java коментарі чи рядки! Період! І навпаки!

Безпека на першому місці! Розробники, які знають, що роблять, самі шукатимуть рядки, якщо це потрібно. В динамічному мовному середовищі це робить Intellij неможливим для використання, оскільки часто і без чіткого шаблону іноді проходять рефакторинг, іноді це змінює ситуацію в проекті, а що ні.

Повинен бути варіант, який говорить: "рефактор лише щодо цього файлу або коли 100% виведено!", Особливо для динамічних мов! Для статичних мов навіть не слід намагатися шукати коментарі та рядки поза файлом.

Я не хотів публічно викладати це, але я вже 2 роки тому порушував цю проблему у програмі пошуку помилок, але ніхто не звертав на це уваги.

РЕДАГУВАТИ

Для тих з вас, хто думає, що я можу зайти далеко, я просто спробував це:

У цьому класі:

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

І додавши це до будь-якого класу Java, наприклад:

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

Під час рефакторингу, KV.valяк і раніше, я отримую наступні рекомендації, ENTER від катастрофи та щось, що я повинен оцінювати та виключати по одному. Це вимагає зусиль і просто дратує і ризикує. Це ніби хтось кричить, СТОП! А потім о, нічого після хвилини, розчарування та 1000 довгих слів (це).

введіть тут опис зображення

Серйозно, чи є спосіб відключити такий вид ризикованої поведінки !? І чи є якась причина, чому це ввімкнено за замовчуванням ??

РЕДАКТУВАТИ 20200706

Лайно триває і в 2020 році: https://youtrack.jetbrains.com/issue/IDEA-245370


5
Intellij сповнений нав'язаних мені речей. Якби андроїд підтримував інші редактори, я б перейшов на серце. Я відчуваю себе боротьбою з редактором, замість того, щоб витрачати час на кодування. Я проводжу тут час, намагаючись знайти спосіб вимкнути ситуацію. Найчастіше вони не рекомендують рішення. Найчастіше вони кажуть ... "ЧОМУ ВИ НЕ НАВІДАЄТЕ ЦЮ ОСОБЛИВОСТЬ?"
TatiOverflow

1
Принаймні ця функція повинна мати мінімальну межу довжини - наприклад, якщо я переробляю змінну із загальним 3-літерним ім'ям, немає сенсу шукати та замінювати це у рядках та коментарях за замовчуванням . Ця послідовність із трьох букв в переважній більшості існує у випадковому рядку, якщо це великий проект. Тьфу.
Вікі Чійвані

1
Зараз це просто і просто зламано. Раніше це була одна IDE, яка мала сенс. Неможливість вимкнути цю жахливу поведінку за замовчуванням робить IntelliJ таким жахливим інструментом для використання, я несвідомо створював жахливі, здавалося б, не пов’язані між собою помилки, просто перейменовуючи такі змінні, як IntelliJ, з якими мене затягували роками ... Я постійно забуваю, що можу Більше не довіряю його рефакторингу -.-
yeoman

1
Сьогодні це змінило шлях відображення весняного MVC POST, оскільки я перемістив клас в інший пакет (!!!!!!!)
yeoman

1
Так, це одна з найгірших особливостей intellij. Якщо я хочу перейменувати клас, я можу в кінцевому підсумку зламати весь проект, де це ім'я класу з'являється в рядках. Так що якщо ви перейменувати клас , Userщоб MyUserвін перейменує всі , включаючи конфігураційні файли, ярлики, URL, шляхи в відображенні відпочинку викликів ...
ACV

Відповіді:


99

Якщо натиснути Shift + F6 (Refactor Rename)двічі, відкриється діалогове вікно, і ви можете відключити функцію "Пошук у коментарях та рядках"


9
Щоб було зрозуміло, що активується ярлик для "Перейменування рефактора" ДВАЖА. Це може бути інша комбінація залежно від вашої розкладки клавіш.
Kris Erickson

4
Дякую, я побачив, що ви також можете вимкнути рефактор inplace, хоча це приємно, тому що це завжди здається безпечним. Основним моментом мого допису було наголосити на тому, що пошук коментарів та рядків слід вимкнути у всьому світі. Немає сенсу в тому, що він намагається змінити значення змінної в іншому класі. Це не розумно. Існує проблема, коли інтелект або ШІ припускають, що, збільшуючи ймовірність правильності, якимось чином допускається похибка. Я хочу суворої реконструкції Java, яка повинна включати XML-файли, якщо не існує цілого імені пакета
mmm 02

1
Але оскільки пам'ятає налаштування, я не бачу з цим проблем. Ви можете використовувати цей повнотекстовий рефакторинг чи ні, залежно від того, що вам потрібно.
Мео

3
На жаль, прапорець, здається, з’являється знову і знову. Хто-небудь знає про налаштування, яке відключить це назавжди? Як уже зазначалося раніше, IntelliJ тут занадто "розумний" для свого блага ...
Ерк,

@Meo, це не поважає скрізь. В даний час вбудований рефакторинг тексту в кодуванні в javascript змінює значення та коментарі в коді, навіть не у функції.
ммм

8

І чи є якась причина, чому це ввімкнено за замовчуванням ??

Так, є. Сьогодні люди, як правило, використовують занадто багато DSL, шаблонів та мовних ін’єкцій. У звичайній старій Java всі ці речі в основному існують як рядки. Reflection API також представляє ім'я методу / класу як рядок. Жодна IDE не може підтримувати та розпізнавати їх усіх, тому найкраще надати вам захисну мережу від можливих помилок рефакторингу. Якщо у вас є відмінне охоплення одиничним тестом, тоді ви, мабуть, у безпеці.

Що стосується коментарів, то вони часто містять зразки коду. Ці фрагменти коду швидко застарівають під час перейменування, тому корисно, коли IDE нагадує вам про їх існування.

Звичайно, ця перевірка призводить до помилкових спрацьовувань. Однак якщо ви надаєте своїм змінним описові імена, що пояснюють самі собою (я маю на увазі не "var" або "val"), це навряд чи станеться. Отже, IDE певним чином підштовхує вас до кращого стилю коду.

Якщо ви все ще не впевнені, дотримуйтесь порад @Meo і вимкніть пошук у рядках та коментарях.


9
Так, це гарна пропозиція. Але, як я коментував його, існує проблема, коли інтелект або ШІ припускають, що, збільшуючи ймовірність правильності, якось допускається похибка. Я хочу суворої реконструкції Java, яка повинна включати файли XML, якщо не існує цілого імені пакета, і навіть тоді я хочу отримувати сповіщення. Результати рефактору не повинні спочатку перераховувати коментарі та рядки і за замовчуванням повинні виключати. Це стало менш зручним для користувача, і вимагає моєї уваги, що змушує мене нахилитися вперед і напружує очі.
ммм

2
Це все одно, що намагатися зняти забитий номер телефону. Чи можете ви повторити цей номер: 392314213343234295423442? Для мене це однакові зусилля, і, безсумнівно, для багатьох інших. Сподіваюсь, хлопці Intellij підхопляться і дають нам можливість вимкнути це.
mmm

10
"Якщо у вас відмінне охоплення модульним тестом, тоді ви, мабуть, тут у безпеці" - це не привід надати нам IDEA, який розглядає Java як динамічну мову. Якби я хотів динамічну мову, я б кодував у Groovy. "Якщо ви надаєте своїм змінним описові імена, що пояснюють самі собою (я маю на увазі не" var "або" val ")" - Ризик зіткнення все ще існує. Просто надайте нам "Строгий" режим / опцію Java, як Eclipse та Intellij, які пропонувались раніше.
ммм

5
Одне неправильне натискання, і я стираю рамки Symfony. Ми повинні мати можливість "виключити за замовчуванням".
Ніколас Зозол,

3
Просто натрапив і на це. Абсолютно небезпечно за замовчуванням, і я зробив помилку, пару раз перейменувавши такі речі, як "value", і не відразу помітив епічну шкоду, яку може нанести проект.
Jilles van Gurp
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.