Skip to content

Дублирование кода (Code Clone)

ID: code_clone | Степень критичности: Средняя (по умолчанию)

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

Почему это «запах»

  • Избыточность поддержки: Исправление ошибки или внесение изменений в одном месте требует обновления всех дубликатов.
  • Нарушение DRY: Дублирование — явный признак отсутствия абстракции или повторного использования.
  • Несогласованная эволюция: Со временем дубликаты могут начать различаться, что ведет к трудноуловимым ошибкам и сложному рефакторингу.

Как исправить

  1. Extract Method: Вынесите общую логику в отдельную функцию и вызывайте её из нескольких мест.
  2. Generic Components: Для UI-кода создайте переиспользуемый компонент с пропсами.
  3. Utility Modules: Перенесите общую вспомогательную логику в общий утилитарный файл.

Конфигурация

yaml
rules:
  code_clone:
    enabled: true
    severity: medium
    min_tokens: 50
    min_lines: 6

Параметры

  • min_tokens: Минимальное количество нормализованных токенов для детекции дубликата (по умолчанию: 50).
  • min_lines: Минимальное количество строк, которое должен занимать дубликат (по умолчанию: 6).

ESLint правило

Этот детектор доступен как правило ESLint для получения обратной связи в реальном времени.

javascript
// eslint.config.js
export default [
  {
    rules: {
      '@archlinter/no-code-clone': 'warn',
    },
  },
];

Смотрите Интеграция с ESLint для инструкций по настройке.

Released under the MIT License.