find-duplication

Finde Code-Duplikate in der Codebasis. Unterstützt zwei Modi – eingeschränkt auf Änderungen des aktuellen Branches oder einen vollständigen Scan der Codebasis. Verwende, wenn der Benutzer darum bittet, … zu finden.

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

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 (internal/, api/, cmd/). 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:

git diff --name-only upstream/main -- 'internal/' 'api/' 'cmd/' | grep '\.go$' | grep -v '_test\.go$'

For full mode, the target is internal/ api/ cmd/.

Step 2: Run dupl

Install and run dupl to find duplicate code blocks:

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:

# Find similar error wrapping
rg "fmt\.Errorf.*%w.*err\)" internal/ -A 1 -B 1

# Find similar reconciler patterns
rg "func.*Reconcile.*\(r reconciler\.Reconciler" internal/ -l

# Find similar asset generation
rg "func Generate.*\(r reconciler\.Reconciler" internal/ -l

Step 4: Check for Repeated Utilities

Look for utility functions that appear in multiple packages:

# Find GetSecretContent-like patterns
rg "func.*GetSecret" internal/ -l

# Find generation helpers
rg "func.*Generate.*Labels" internal/ -l

# Find comparison helpers
rg "func.*Equal\(" internal/ -l

These should be in internal/controller/utils/ or similar shared locations.

Step 5: Classify Findings

For each duplicate found, classify:

CategoryAction
Extract — identical logic in 3+ placesRecommend a shared helper in utils
Parameterize — same structure, different valuesRecommend a common function with parameters
Acceptable — similar but serving different domains (e.g. appserver vs postgres)Note it, no action needed
Boilerplate — kubebuilder/controller-runtime patternsSkip, this is framework convention
Test-only — repeated test setup/fixturesRecommend 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., internal/controller/utils/)

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

Mehr Skills von openshift

openshift-docs
openshift
Durchsuchen und Lesen der OpenShift Container Platform-Dokumentation im Markdown-Format. Verwenden, wenn der Benutzer nach OpenShift-Funktionen, Konfiguration, Installation, … fragt.
triage-leaked-infra
openshift
Bewerten Sie, ob eine AWS-VPC oder eine Infrastruktur aus HyperShift CI sicher gelöscht werden kann. Verwenden Sie dies, wenn der Benutzer eine saubere geleakte Ausgabe einfügt und fragt: „Kann ich das löschen?“, „Ist…
openshift-expert
openshift
OpenShift-Plattform- und Kubernetes-Experte mit fundierten Kenntnissen in Cluster-Architektur, Operatoren, Netzwerk, Speicher, Fehlerbehebung und CI/CD-Pipelines. Nutzen…
Konflux Archived PipelineRuns
openshift
Greift auf archivierte Konflux PipelineRuns, TaskRuns und Pod-Logs über KubeArchive zu. Wird automatisch angewendet, wenn Konflux PipelineRun-Ergebnisse überprüft, untersucht…
backport
openshift
Commits oder PRs vom Hauptzweig in einen Release-Zweig zurückportieren. Verwenden, wenn der Benutzer darum bittet, Änderungen zwischen Zweigen zurückzuportieren, zu cherry-picken oder zu portieren, oder beim Beheben von…
rebase
openshift
Rebase den aktuellen Branch auf seinen Basis-Branch, löse alle Konflikte und stelle sicher, dass Lint, i18n und Build erfolgreich durchlaufen. Verwende dies, wenn der Benutzer darum bittet, zu rebasen, zu aktualisieren oder zu synchronisieren…
Build CPO Image
openshift
Erstellen und Pushen des control-plane-operator-Container-Images. Wird automatisch angewendet, wenn CPO-Änderungen getestet werden, die ein Deployment auf einem Live-Cluster erfordern.
find-complexity
openshift
Findet Funktionen und Methoden mit hoher zyklomatischer Komplexität, übermäßiger Länge oder zu vielen Parametern. Verwenden, wenn der Benutzer bittet, komplexen Code, Komplexität zu finden…