вариант
ДомДом Skill Другое review-duplication

review-duplication

google-gemini/gemini-cli google-gemini/gemini-cli

Используйте этот навык при проведении ревью кода, чтобы проактивно выявлять в кодовой базе дублирующиеся функции, «изобретение велосипеда» или неиспользование существующих передовых практик проекта и общих утилит.

...Расширить все
10
Обновлено время 13 августа 2026 г.

Дублирование отзывов

Обзор

Данный навык обеспечивает структурированный рабочий процесс для анализа кодовой базы во время рецензирования кода с целью выявления дублирующейся логики, повторно реализованных утилит и упущенных возможностей повторного использования проверенных шаблонов. Выполняя этот рабочий процесс, вы гарантируете, что новый код будет органично интегрироваться в существующую архитектуру проекта.

Рабочий процесс: поиск дубликатов

При рецензировании кода выполните следующие шаги перед завершением рецензии:

1. Выделение основной логики

Проанализируйте новый код, чтобы выявить вводимые основные алгоритмы, служебные функции, общие структуры данных или компоненты пользовательского интерфейса. Не ограничивайтесь конкретной бизнес-логикой — обратите внимание на лежащие в основе механизмы.

2. Сформулируйте гипотезы о существующих местах размещения и проследите зависимости

Подумайте, где мог бы находиться код такого типа, если бы он уже существовал в проекте. Укажите абсолютные пути от корня репозитория, чтобы избежать неоднозначности.

  • Утилиты: packages/core/src/utils/, packages/cli/src/utils/
  • Компоненты пользовательского интерфейса: packages/cli/src/ui/components/, packages/cli/src/ui/
  • Сервисы: packages/core/src/services/, packages/cli/src/services/
  • Конфигурация: packages/core/src/config/, packages/cli/src/config/
  • Основная логика: указывайте packages/core/, если функциональность не относится конкретно к пользовательскому интерфейсу React.

Отслеживание сторонних зависимостей: если в PR вводится новый импорт для библиотеки утилит (например, lodash.merge, date-fns), отследите, как и где в проекте в настоящее время используется эта библиотека. Скорее всего, уже существует готовый оберточный модуль или общая утилита.

Проверка файлов пакетов: прежде чем отмечать пользовательскую реализацию сложного алгоритма, проверьте файл package.json, чтобы убедиться, не установлена ли уже стандартная библиотека (такая как lodash или uuid), предоставляющая эту функциональность.

3. Изучение кодовой базы (делегирование задач субагентам)

Делегируйте основную работу по исследованию кодовой базы специализированным субагентам. Они оптимизированы для выполнения глубокого поиска и семантического сопоставления без перегрузки истории ваших сеансов.

Чтобы обеспечить всесторонний анализ, вы ДОЛЖНЫ сформулировать очень конкретные задачи для субагентов, предоставив им «зацепки», обнаруженные вами на этапе 1.

  • Исследователь кодовой базы: используйте codebase_investigator в качестве основного исследователя. При делегировании сформулируйте задачу, содержащую конкретные исследовательские вопросы о кодовой базе, явно включая следующие векторы поиска:
    • Структурное сходство: Спросите, использует ли существующий код те же базовые API (например: «Использует ли какой-либо существующий код Intl.DateTimeFormat или setTimeout для аналогичных целей?»).
    • Конвенции именования: Спросите, существуют ли символы с похожими шаблонами именования (например: «Есть ли существующие символы с шаблонами именования типа *Format* или *Debounce*?»).
    • Комментарии и документация: спросите, существуют ли ключевые слова из комментариев к PR или JSDoc, описывающие аналогичное поведение в других местах.
    • Соответствие архитектуре: Спросите, где в настоящее время централизована логика данного типа (например: «Где находится централизованная логика форматирования даты?»).
    • Рекомендации по рефакторингу: Очень важно попросить субагента объяснить, как новый код можно рефакторировать, чтобы использовать любую найденную им существующую логику.
  • Универсальный агент: Используйте универсального агента для детальных сравнений, требующих большого количества итераций. Например: «Проанализируйте реализацию MyNewComponent в PR и сравните её по смыслу со всеми компонентами в packages/ui/src. Есть ли какие-либо существующие компоненты, которые можно было бы расширить или использовать вместо него?»
  • Сохраняйте быстрый путь для простых поисков: для чрезвычайно простых и однозначных проверок (например, «Включает ли package.json lodash?») выполняйте прямой поиск, чтобы сэкономить время. По умолчанию делегируйте любые «исследования» с открытым исходом.

4. Оценка лучших практик

Проверьте, соответствует ли новый код установленным в проекте конвенциям.

  • Обработка ошибок: используются ли стандартные для проекта классы ошибок или механизмы ведения журнала?
  • Управление состоянием: обходят ли в коде установленные хранилища или контексты?
  • Стиль: жестко ли прописаны цвета или интервалы вместо использования переменных темы? Если в PR вводится новый паттерн, сравните его с задокументированными стандартами и явно подтвердите, не следовало ли вместо этого использовать существующий паттерн проекта.

5. Сформулируйте конструктивные замечания

Если вы обнаружили, что PR дублирует существующую функциональность или игнорирует лучшие практики:

  • Оставьте чёткий комментарий к ревью.
  • Укажите источник: явно укажите абсолютный или относительный по проекту путь к файлу, а также конкретный символ (функцию, компонент, класс), который следует повторно использовать.
  • Рекомендации по реализации: предоставьте краткий фрагмент кода или чёткое объяснение, демонстрирующее, как интегрировать существующий код для выполнения требований задачи.
  • Объясните преимущества: кратко объясните, почему повторное использование существующего кода выгодно (например, удобство обслуживания, согласованность, встроенная обработка крайних случаев).

Пример комментария:

«Похоже, в этом PR представлена новая утилита formatDate. У нас уже есть надежная и протестированная функция formatDate в файле src/utils/dateHelpers.ts.

Вы можете заменить свою реализацию, импортировав её следующим образом:

import { formatDate } from '../utils/dateHelpers';// Затем используйте её здесь:
const displayDate = formatDate(userDate, 'MMM Do, YYYY');

Использование этой функции гарантирует, что форматирование даты будет согласованным с остальной частью приложения и будет правильно обрабатывать преобразования часовых поясов».

Ещё из этогорепозитория тот же репозиторий

Ещё из этого репозитория

effortgoogle-gemini/gemini-cliОценивает трудозатраты, необходимые для устранения данной проблемы.2026-07-07106,2kqualitygoogle-gemini/gemini-cliОценивает, является ли проблема в GitHub спамом, пустой, требует ли дополнительной информации или можно продолжать работу.07.07.2026 106,2 тыс. spec-generator google-gemini/gemini-cli Генерирует структурированный JSON-файл Workable Spec в качестве руководства для разработчика-исполнителя.2026-07-07106.2kantigravity-supportgoogle-gemini/gemini-cliИспользуется, когда пользователь задает вопросы, обращается за помощью или запрашивает инструкции, связанные с установкой, настройкой или переходом на Antigravity CLI. Этот навык предоставляет самые свежие сведения, требования и команды, взятые из официальной документации Antigravity CLI.2026-06-09 106.2kagent-tuigoogle-gemini/gemini-cli Основные агенты: НЕ используйте этот навык напрямую. Если вам нужно протестировать TUI, вызовите субагента `tui_tester`. Программно управляйте приложениями с терминальным интерфейсом пользователя (TUI) для тестирования, автоматизации и проверки. Используйте в следующих случаях: при автоматизации взаимодействий с CLI/TUI, регрессионном тестировании терминальных приложений или проверке интерактивного поведения. Также используйте в следующих случаях: когда пользователь спрашивает «что такое agent-tui», «что делает agent-tui», «демонстрация agent-tui», «покажи мне agent-tui», «как работает agent-tui» или хочет увидеть его в действии.2026-05-18106.2ktui-testergoogle-gemini/gemini-cliРекомендации экспертов по тестированию поведения Gemini CLI и визуального вывода с помощью автоматизации терминала.2026-05-18106.2k
Посмотреть на GitHub

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."

More from this repositorysame repository

More from this repository

effortgoogle-gemini/gemini-cli

Estimates the implementation effort required to address the given issue.

2026-07-07106.2k
qualitygoogle-gemini/gemini-cli

Evaluates whether a GitHub issue is spam, empty, needs more information, or is OK to proceed.

2026-07-07106.2k
spec-generatorgoogle-gemini/gemini-cli

Generates a structured Workable Spec JSON to guide a Developer Worker.

2026-07-07106.2k
antigravity-supportgoogle-gemini/gemini-cli

Use when the user asks questions, seeks help, or requests instructions related to installing, setting up, or migrating to Antigravity CLI. This skill provides the latest up to date details, requirements, and commands sourced from the official Antigravity CLI documentation.

2026-06-09106.2k
agent-tuigoogle-gemini/gemini-cli

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 programmatically for testing, automation, and inspection. Use when: automating CLI/TUI interactions, regression testing terminal apps, or verifying interactive behavior. Also use when: user asks "what is agent-tui", "what does agent-tui do", "demo agent-tui", "show me agent-tui", "how does agent-tui work", or wants to see it in action.

2026-05-18106.2k
tui-testergoogle-gemini/gemini-cli

Expert guidance for testing Gemini CLI behavior and visual output using terminal automation.

2026-05-18106.2k

Все файлы

1 файлов

Установить review-duplication

Скачайте файлы навыков и распакуйте их в каталог .claude/skills/.

Скачать ZIP

Клонируйте репозиторий и скопируйте файлы навыка в свой проект.

git clone https://github.com/google-gemini/gemini-cli/tree/main/.gemini/skills/review-duplication # Copy the skill folder to .claude/skills/ or .codex/skills/

Копировать Копировать
Быстрая настройка: Скопируйте папку со скиллом в каталог .claude/skills/ — Claude автоматически обнаружит и начнет использовать этот скилл
Репозиторий google-gemini/gemini-cli

Похожие навыки

multica-creating-agents
Обновлено время 12 августа 2026 г.
tilemaps
Обновлено время 4 августа 2026 г.
v4-new-features
Обновлено время 4 августа 2026 г.
pixijs-application
Обновлено время 4 августа 2026 г.
OR