Skip to main content

find-duplication

Find code duplication in the codebase. Supports two modes - scoped to current branch changes or a full codebase sweep. Use when the user asks to find duplicated code, copy-paste, repeated patterns, or wants to deduplicate before a PR.

Datos de origen

Repositorio
openshift/lightspeed-agentic-operator
Última actividad en el origen
10 de mayo de 2026 a las 16:04
Idioma detectado de SKILL.md
inglés
Estrellas
13
Forks
26

Opciones de instalación

De forma predeterminada está seleccionado el prompt que primero revisa el origen. Puedes cambiar a un comando directo o descargar una copia local.

Revisa los archivos de origen

Lee SKILL.md y los archivos complementarios que muestra SkillsMP antes de decidir si quieres instalarlo.

Mostrando SKILL.md

SKILL.md
Instrucciones de origen · Vista previa de solo lectura
name
find-duplication
description
Find code duplication in the codebase. Supports two modes - scoped to current branch changes or a full codebase sweep. Use when the user asks to find duplicated code, copy-paste, repeated patterns, or wants to deduplicate before a PR.
disable-model-invocation
true
# Find Code Duplication Detect duplicated or near-duplicate Go code and suggest consolidation candidates. ## Rules - Report findings, do not refactor. Refactoring is a separate task. - Focus on production code (`controller/`, `api/`, `cmd/`, `cli/`). 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 codebase. For branch mode: ```bash git diff --name-only upstream/main -- 'controller/' 'api/' 'cmd/' 'cli/' | grep '\.go$' | grep -v '_test\.go$' ``` For full mode, the target is `controller/ api/ cmd/ cli/`. ## Step 2: Run dupl Install and run dupl to find duplicate code blocks: ```bash go install github.com/mibk/dupl@latest dupl -threshold 15 <target> ``` `-threshold 15` means at least 15 tokens of duplication. Lower values = more noise. Review output and filter false positives: - Import blocks (common imports are not duplication) - Error constant declarations (repeated pattern is intentional) - Single-line patterns (logging, error wrapping) - Kubebuilder boilerplate (RBAC markers, webhook setup) ## Step 3: Semantic Duplication Search dupl only catches textual similarity. Also look for: 1. **Similar function signatures** — functions with near-identical parameter lists doing similar work across different packages. 2. **Repeated error handling** — same `if err != nil { return fmt.Errorf(...) }` pattern with slight variations. 3. **Copy-pasted reconciler logic** — similar reconciliation patterns across different controllers. 4. **Duplicated struct definitions** — similar structs in different packages (candidate for shared types). Search for patterns: ```bash # Find similar error wrapping rg "fmt\.Errorf.*%w.*err\)" controller/ api/ cmd/ cli/ -A 1 -B 1 # Find similar reconciler patterns rg "func.*Reconcile" controller/ -l # Find similar generation helpers rg "func Generate" controller/ -l ``` ## Step 4: Check for Repeated Utilities Look for utility functions that appear in multiple packages: ```bash # Find GetSecretContent-like patterns rg "func.*GetSecret" controller/ api/ cmd/ cli/ -l # Find generation helpers rg "func.*Generate.*Labels" controller/ api/ cmd/ cli/ -l # Find comparison helpers rg "func.*Equal\(" controller/ api/ cmd/ cli/ -l ``` These should live in a single shared place (e.g. a small helper file or package under `controller/`) rather than copy-pasted across packages. ## Step 5: Classify Findings For each duplicate found, classify: | Category | Action | |----------|--------| | **Extract** — identical logic in 3+ places | Recommend a shared helper (e.g. under `controller/` or a small `pkg/`) | | **Parameterize** — same structure, different values | Recommend a common function with parameters | | **Acceptable** — similar but serving different domains (app server vs lcore) | Note it, no action needed | | **Boilerplate** — kubebuilder/controller-runtime patterns | Skip, this is framework convention | | **Test-only** — repeated test setup/fixtures | Recommend shared test fixture (only if user asked) | ## Step 6: Report For each finding: 1. Files and line ranges involved 2. What is duplicated (brief description) 3. Token/line count 4. Classification (extract / parameterize / acceptable / boilerplate) 5. Suggested location for shared code (e.g. next to callers or a small internal helper package) Summary: total findings, how many actionable, estimated lines saved.
Ver en GitHub