find-duplication

작성자: openshift

코드베이스에서 코드 중복을 찾습니다. 현재 브랜치 변경 사항으로 범위를 지정하거나 전체 코드베이스를 검사하는 두 가지 모드를 지원합니다. 사용자가 찾기를 요청할 때 사용합니다.

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.

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