find-duplication

bởi openshift

Tìm mã trùng lặp trong cơ sở mã. Hỗ trợ hai chế độ - giới hạn trong các thay đổi của nhánh hiện tại hoặc quét toàn bộ cơ sở mã. Sử dụng khi người dùng yêu cầu tìm…

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.

Thêm skills từ openshift

openshift-expert
openshift
Chuyên gia nền tảng OpenShift và Kubernetes với kiến thức sâu về kiến trúc cluster, operators, mạng, lưu trữ, xử lý sự cố và pipeline CI/CD. Sử dụng…
official
find-token
openshift
Tìm mã xác thực ẩn. Chạy tập lệnh find-token để lấy mã duy nhất.
official
code-review
openshift
Xem xét một pull request về chất lượng mã, tính đúng đắn và các quy ước của dự án. Sử dụng khi người dùng yêu cầu xem xét một PR, đánh giá mã, hoặc kiểm tra các thay đổi trên một…
official
css-review
openshift
Xem xét CSS về phong cách mã hóa, cách sử dụng token PatternFly và các phương pháp tốt nhất. Sử dụng khi người dùng yêu cầu xem xét CSS, kiểm tra kiểu dáng hoặc kiểm tra các tệp CSS.
official
review-readmes
openshift
Xem xét tất cả các tệp README.md trong kho lưu trữ để tìm lỗi chính tả, lỗi sai và thông tin lỗi thời. Sử dụng khi người dùng yêu cầu xem xét README, kiểm tra độ chính xác của tài liệu, hoặc…
official
review-skills
openshift
Xem xét các kỹ năng AI của dự án để phát hiện trùng lặp, tham chiếu lỗi thời, sai sót và vấn đề cấu trúc. Sử dụng khi người dùng yêu cầu xem xét kỹ năng, kiểm tra kỹ năng, kiểm tra…
official
test
openshift
Chạy kiểm thử đầu cuối được lọc theo thẻ. Sử dụng khi người dùng yêu cầu chạy kiểm thử, chạy Playwright, hoặc kiểm thử một tính năng cụ thể có thẻ như @core hoặc @attach.
official
unused-exports
openshift
Tìm các ký hiệu được xuất khẩu nhưng không bao giờ được nhập vào tệp khác. Sử dụng khi người dùng nói "kiểm tra xuất khẩu", "xuất khẩu không dùng" hoặc yêu cầu dọn dẹp xuất khẩu.
official