find-duplication

Найти дублирование кода в кодовой базе. Поддерживает два режима — в пределах изменений текущей ветки или полное сканирование кодовой базы. Использовать, когда пользователь просит найти…

npx skills add https://github.com/openshift/lightspeed-service --skill find-duplication

Find Code Duplication

Detect duplicated or near-duplicate code and suggest consolidation candidates.

Rules

  • Report findings, do not refactor. Refactoring is a separate task.
  • Focus on production code (ols/). Skip test duplication unless explicitly asked.
  • Group findings by severity: exact duplicates first, then near-duplicates.
  • For each finding, state whether extraction is worth it or acceptable duplication.

Step 1: Determine Scope

Ask the user:

  • Branch mode: only files changed in the current branch vs main.
  • Full mode: scan the entire ols/ directory.

For branch mode:

git diff --name-only origin/main -- 'ols/' | grep '\.py$'

For full mode, the target is ols/.

Step 2: Run Pylint Duplicate Detection

uv run pylint --disable=all --enable=duplicate-code --min-similarity-lines=6 <target files or directory>

Review output. Filter out false positives:

  • Import blocks (common imports are not duplication)
  • Pydantic model boilerplate (Field declarations)
  • Single-line patterns (logging, raises)

Step 3: Semantic Duplication Search

Pylint only catches textual similarity. Also look for:

  1. Similar function signatures — functions with near-identical parameter lists doing similar work.
  2. Repeated error handling — same try/except/log/return pattern across multiple files.
  3. Copy-pasted blocks — search for distinctive string literals or variable names that appear in multiple files.
rg "<distinctive pattern>" ols/ --type py -l

Step 4: Classify Findings

For each duplicate found, classify:

CategoryAction
Extract — identical logic in 3+ placesRecommend a shared helper
Parameterize — same structure, different valuesRecommend a common function with parameters
Acceptable — similar but serving different domainsNote it, no action needed
Test-only — repeated test setup/fixturesRecommend shared fixture (only if user asked)

Step 5: Report

For each finding:

  1. Files and line ranges involved
  2. What is duplicated (brief description)
  3. Classification (extract / parameterize / acceptable)
  4. Suggested location for shared code (if applicable)

Summary: total findings, how many actionable, estimated lines saved.

Больше skills от openshift

openshift-expert
openshift
Эксперт по платформе OpenShift и Kubernetes с глубокими знаниями архитектуры кластеров, операторов, сетей, хранилищ, устранения неполадок и CI/CD-пайплайнов. Используйте…
official
find-token
openshift
Найти скрытый верификационный токен. Запустите скрипт find-token, чтобы получить уникальный токен.
official
code-review
openshift
Проверить пул-реквест на качество кода, корректность и соответствие стандартам проекта. Используется, когда пользователь просит провести ревью PR, проверить код или изучить изменения в…
official
css-review
openshift
Проверка CSS на соответствие стилю кодирования, использование токенов PatternFly и лучшие практики. Используйте, когда пользователь просит проверить CSS, оценить стили или провести аудит CSS-файлов.
official
review-readmes
openshift
Проверить все файлы README.md в репозитории на опечатки, ошибки и устаревшую информацию. Использовать, когда пользователь просит проверить README, точность документации или…
official
review-skills
openshift
Проверка AI-навыков проекта на дублирование, устаревшие ссылки, ошибки и структурные проблемы. Используется, когда пользователь просит проверить навыки, провести аудит навыков, проверить на…
official
test
openshift
Запустить сквозные тесты, отфильтрованные по тегу. Используйте, когда пользователь просит запустить тесты, запустить Playwright или протестировать конкретный тег функции, например @core или @attach.
official
unused-exports
openshift
Находит экспортированные символы, которые никогда не импортируются другим файлом. Используется, когда пользователь говорит «проверить экспорт», «неиспользуемый экспорт» или просит очистить экспорт.
official