Можно ли отключить обнаружение повторяющегося кода в Intellij?

149

Можно ли отключить обнаружение повторяющегося кода в Intellij?

Я не нашел эту функцию полезной, и она продолжает меня отвлекать.

зуддуз
источник

Ответы:

208

Доступно только в IntelliJ Ultimate:

Чтобы отключить обнаружение повторяющегося кода, перейдите в

Файл → Настройки → Редактор → Инспекции → Общие → Дублированный фрагмент кода

и снимите флажок «Дублировать фрагмент кода». дублирование кода intellij

Войтех Ружичка
источник
4
Эта опция недоступна в версии сообщества IDEA.
Saikat
4
Обнаружение дублирующегося кода @takias вообще не является функцией в версии Community. Он присутствует только в версии Ultimate.
AER
3
На самом деле он работает после того, как вы закроете файл, над которым работаете, и снова откроете его или перезапустите IDE после применения этих настроек
ACV
1
Предлагаемые действия должны предлагать перейти к этому экрану, чтобы мы могли легче отключить эти проверки кода.
Шадонинджа
159

Добавьте подсказку в свой код, чтобы другие знали о ваших намерениях:

@SuppressWarnings("Duplicates")
Макс Баррасс
источник
3
Это технический ответ, спасибо
Yougesh
15
Лучшее решение, поскольку позволяет подавить конфликты, когда дублирование является преднамеренным.
user2120275
2
^ сделайте это, не отключайте его полностью. Повторяющийся код - это запах кода, за исключением некоторых мест
Carson Graham
1
Вы шутите? Добавить код для компенсации недостатка IDE?
ACV
15

Да, это возможно , но я бы категорически не советовал!

Дублирование кода - это форма технического долга. Любой дублированный код, содержащий ошибку, означает, что теперь у вас есть дублированная ошибка - тогда вы рискуете, что, исправив ее, вы исправите ее только в одном месте, а дубликат останется ...

Если предупреждения о дублировании кода отвлекают вас, то лучшая стратегия избавления от них - это удалить дублирование кода ... Ваша кодовая база и будущие сопровождающие будут вам за это благодарны

Кевин Райт
источник
40
Хорошо, но иногда у меня есть старая версия и новая версия того же класса. Дублирование - это нормально, предупреждение мне не нужно. Это просто очень навязчиво и скрывает множество других полезных предупреждений. Вопрос законный.
Florian F
3
Я считаю, что он срабатывает ошибочно для модульных тестов с аналогичными настройками. Иногда я не могу заставить его уйти, даже если я действительно значительно изменил тесты.
Julian Jocque
8
Не всегда так просто избавиться от дубликатов! Например, в веб-контроллерах есть много сходства, которое помечает как дубликаты, они не являются точными дубликатами. Сохранение логического разделения контроллеров полезно во многих отношениях, и это только один пример. Прагматичный, а не пуристский, по моему опыту, реализует проекты.
Шон Вейдер
5
Вы утверждаете, что это возможно, но не описываете, как это сделать. Есть масса ситуаций, в которых нет смысла пытаться абстрагироваться. Пожалуйста, по крайней мере, скажите: «Да, вот как, НО ....»
Дилапид
3
этот ответ вообще не имеет отношения к вопросу.
ACV
5

Этот ответ может быть немного неуместным, но я нашел его полезным. Из этого ответа, если вы хотите отключить его для определенного блока кода, а не всего метода, класса или ide, просто добавьте следующую строку непосредственно перед этим блоком кода

//noinspection Duplicates

Примечание: вы не можете помещать другие комментарии после этой строки.

Эмдадул Савон
источник
0

Не удалось заставить ни один из этих ответов работать в Webstorm.

Чтобы обойти это, не отключая эту функцию, я добавил эту строку кода:

if (Math.random() === 1) console.info('suppress duplicate code warning')

Это заставляет предупреждение исчезнуть, если вы добавите его в один из двух дублирующих файлов, поскольку они больше не дублируются.

Другой альтернативой, если вы используете lodash, является:

noop('suppress duplicate code warning')
danday74
источник