Устранение дублирования кода в одном файле

К сожалению, проект, над которым я работал в последнее время, имеет большой объем кода для копирования и вставки даже в отдельных файлах. Существуют ли какие-либо инструменты или методы, которые могут обнаружить дублирование или почти дублирование в одном файле? Я имею Beyond Compare 3, и он отлично подходит для сравнения отдельных файлов, но я затрудняюсь сравнивать отдельные файлы.

Спасибо заранее.

Edit:

Спасибо за все замечательные инструменты! Я определенно проведу их.

Этот проект является проектом ASP.NET/C#, но я работаю с различными языками, включая Java; Мне интересно, какие инструменты лучше всего (для любого языка), чтобы удалить дублирование.

Ответ 1

Проверьте Atomiq. Он находит код, который является дубликатом, который является простым для извлечения в одно местоположение.

http://www.getatomiq.com/

Ответ 3

См. SD CloneDR, инструмент для обнаружения кода копирования-вставки и внутри нескольких файлов. Он обнаруживает точные копии, копии, которые были переформатированы, и копии, близкие к пропуску, с разными идентификаторами, литералами и даже разными выражениями.

CloneDR обрабатывает многие языки, включая Java (1.4.1.5.1.6) и С#, особенно до С# 4.0. Вы можете просмотреть отчеты об обнаружении клонирования образцов на веб-сайте, в том числе один для С#.

Ответ 4

Вы не говорите, какой язык вы используете, что повлияет на то, какие инструменты вы можете использовать.

Для Python существует CloneDigger. Он также поддерживает Java, но я этого не пробовал. Он может найти дублирование кода как с одним файлом, так и между файлами, и дает результат в виде отчета типа diff в HTML.

Ответ 5

Resharper делает это автоматически - это предполагает, когда он думает, что код должен быть извлечен в метод, и сделает для вас извлечение

Ответ 6

Откажитесь от PMD, как только вы его настроили (это довольно просто) вы можете запустить детектор копирования папок, чтобы найти дубликат кода.

Ответ 7

Один с некоторыми навыками Office может сделать следующую последовательность за 1 минуту:

  • используйте обычный форматтер, чтобы унифицировать стиль кода, желательно без переноса строки.
  • передать текст кода в Microsoft Excel как один столбец
  • искать и заменять все двойные пробелы одним и делать другие замены
  • сортировать столбец

В этот момент ключевые слова для дубликатов будут уже хорошо обнаружены. Но идти дальше

  • добавьте формулу компаратора в 2-й столбец и сравните с третьим
  • снова копировать и вставлять значения, сортировать и видеть наиболее повторяющиеся строки

Ответ 8

Существует инструмент анализа, называемый Simian, который я еще не пробовал. Предположительно, он может запускаться на любом виде текста и указывать дублированные элементы. Его можно использовать через интерфейс командной строки.

Ответ 9

Другой вариант, аналогичный описанному выше, но с другой цепочкой инструментов: https://www.npmjs.com/package/jscpd