review-duplication

作者: google-gemini

在程式碼審查期間使用此技能,主動檢查程式碼庫中是否存在重複功能、重複造輪子或未能重複使用現有…

npx skills add https://github.com/google-gemini/gemini-cli --skill review-duplication

Review Duplication

Overview

This skill provides a structured workflow for investigating a codebase during a code review to identify duplicated logic, reinvented utilities, and missed opportunities to reuse established patterns. By executing this workflow, you ensure that new code integrates seamlessly with the existing project architecture.

Workflow: Investigating for Duplication

When reviewing code, perform the following steps before finalizing your review:

1. Extract Core Logic

Analyze the new code to identify the core algorithms, utility functions, generic data structures, or UI components being introduced. Look beyond the specific business logic to see the underlying mechanics.

2. Hypothesize Existing Locations & Trace Dependencies

Think about where this type of code would live if it already existed in the project. Provide absolute paths from the repo root to disambiguate.

  • Utilities: packages/core/src/utils/, packages/cli/src/utils/
  • UI Components: packages/cli/src/ui/components/, packages/cli/src/ui/
  • Services: packages/core/src/services/, packages/cli/src/services/
  • Configuration: packages/core/src/config/, packages/cli/src/config/
  • Core Logic: Call out packages/core/ if functionality does not appear React UI specific.

Trace Third-Party Dependencies: If the PR introduces a new import for a utility library (e.g., lodash.merge, date-fns), trace how and where the project currently uses that library. There is likely an existing wrapper or shared utility.

Check Package Files: Before flagging a custom implementation of a complex algorithm, check package.json to see if a standard library (like lodash or uuid) is already installed that provides this functionality.

3. Investigate the Codebase (Sub-Agent Delegation)

Delegate the heavy lifting of codebase investigation to specialized sub-agents. They are optimized to perform deep searches and semantic mapping without bloating your session history.

To ensure a comprehensive review, you MUST formulate highly specific objectives for the sub-agents, providing them with the "scents" you discovered in Step 1.

  • Codebase Investigator: Use the codebase_investigator as your primary researcher. When delegating, formulate an objective that asks specific, investigative questions about the codebase, explicitly including these search vectors:
    • Structural Similarity: Ask if existing code uses the same underlying APIs (e.g., "Does any existing code use Intl.DateTimeFormat or setTimeout for similar purposes?").
    • Naming Conventions: Ask if there are existing symbols with similar naming patterns (e.g., "Are there existing symbols with naming patterns like *Format* or *Debounce*?").
    • Comments & Documentation: Ask if keywords from the PR's comments or JSDoc exist in describing similar behavior elsewhere.
    • Architectural Fit: Ask where this type of logic is currently centralized (e.g., "Where is centralized date formatting logic located?").
    • Refactoring Guidance: Crucially, ask the sub-agent to explain how the new code could be refactored to use any existing logic it finds.
  • Generalist Agent: Use the generalist for detailed, turn-intensive comparisons. For example: "Review the implementation of MyNewComponent in the PR and compare it semantically against all components in packages/ui/src. Are there any existing components that could be extended or used instead?"
  • Retain Fast Path for Simple Searches: For extremely simple, unambiguous checks (e.g., "Does package.json include lodash?"), perform a direct search to save time. Default to delegation for any open-ended "investigations."

4. Evaluate Best Practices

Check if the new code aligns with the project's established conventions.

  • Error Handling: Does it use the project's standard error classes or logging mechanisms?
  • State Management: Does it bypass established stores or contexts?
  • Styling: Does it hardcode colors or spacing instead of using theme variables? If the PR introduces a new pattern, compare it against the documented standards and explicitly confirm if an existing project pattern should have been used instead.

5. Formulate Constructive Feedback

If you discover that the PR duplicates existing functionality or ignores a best practice:

  • Provide a clear review comment.
  • Identify the Source: Explicitly mention the absolute or project-relative file path and the specific symbol (function, component, class) that should be reused.
  • Implementation Guidance: Provide a brief code snippet or a clear explanation showing how to integrate the existing code to fulfill the task's requirements.
  • Explain the Value: Briefly explain why reusing the existing code is beneficial (e.g., maintainability, consistency, built-in edge case handling).

Example comment:

"It looks like this PR introduces a new formatDate utility. We already have a robust, tested formatDate function in src/utils/dateHelpers.ts.

You can replace your implementation by importing it like this:

import { formatDate } from '../utils/dateHelpers';

// Then use it here:
const displayDate = formatDate(userDate, 'MMM Do, YYYY');

Reusing this ensures that the date formatting remains consistent with the rest of the application and handles timezone conversions correctly."

來自 google-gemini 的更多技能

agent-tui
google-gemini
Main Agents: Do NOT use this skill directly. If you need to test the TUI, invoke the `tui_tester` subagent. Drive terminal UI (TUI) applications…
gemini-api-cli
google-gemini
使用 Gemini API CLI 工具的指南。當你需要透過命令列與 Gemini API 互動、管理代理或生成媒體(圖片、……)時使用。
behavioral-evals
google-gemini
建立、執行、修正及推廣行為評估的指引。用於驗證代理決策邏輯、除錯失敗、除錯提示…
gemini-live-api-dev
google-gemini
通過WebSocket與Gemini進行即時雙向串流,支援音訊、視訊和文字對話。支援音訊輸入/輸出(16 kHz PCM)、視訊幀、文字,以及具備語音活動偵測的自動轉錄功能,可處理中斷情況。包含原生音訊功能:情感對話、主動音訊和思考模式;支援同步和非同步工具使用的函式呼叫;以及Google Search基礎驗證。提供具備上下文壓縮、恢復功能的會話管理,以及...
gemini-omni-flash-api
google-gemini
使用此技能進行生成式影片編輯、文字轉影片、圖片參考影片生成,以及基於…的首幀轉場動畫。
gemini-api-dev
google-gemini
We need to translate the given text from English to Traditional Chinese. The text describes building applications with Google's Gemini models, mentioning multimodal content, function calling, structured outputs, supported languages, model versions, features, and SDKs. We must preserve the name "gemini-api-dev" but it's not in the text, so ignore. Also preserve technical terms like "Gemini", "Pro", "Flash", "Pro Image", "1M token context", "Gemini 2.x", "1.5", "JSON", "SDKs", "google-genai", etc. No extra commentary. Output only the translation. Translation: 使用 Google 的 Gemini 模型建置應用程式,支援多模態內容、函式呼叫與結構化輸出,涵蓋 Python、JavaScript、Go 及 Java。可存取最新的 Gemini 3 模型(Pro、Flash、Pro Image),具備 100 萬 Token 上下文;舊版 Gemini 2.x 與 1.5 模型已棄用。支援文字生成、圖片/音訊
gemini-interactions-api
google-gemini
Gemini模型與代理的統一介面,具備伺服器端狀態、串流與工具編排功能。支援多種當前模型(gemini-3-flash-preview、gemini-3-pro-preview、gemini-2.5-flash/pro)及Deep Research代理;自動將已棄用的模型ID替換為當前替代方案。透過previous_interaction_id將對話歷史卸載至伺服器,實現有狀態的多輪互動,無需手動管理歷史記錄。內建工具編排功能,包括...
deliver
google-gemini
將簡報的精簡版本發布到 Google Chat 或 Slack 的 incoming webhook,讓每日執行自動送達——若未設定 webhook 則靜默跳過…