Wenn Sie benutzerdefinierte Best Practices oder Konventionen haben, die Gemini Code Assist auf GitHub prüfen soll, können Sie dem .gemini/-Stammordner Ihres Repositorys eine styleguide.md-Datei hinzufügen. Nutzer der Unternehmensversion von Gemini Code Assist auf GitHub können die Google Cloud Console verwenden, um Styleguide-Informationen hinzuzufügen, die in mehreren Repositorys verwendet werden sollen.
In beiden Fällen wird der Styleguide als reguläre Markdown-Datei behandelt und erweitert den Standardprompt, den Gemini Code Assist auf GitHub verwendet. Eine Anleitung zum Hinzufügen eines Styleguides finden Sie unter Konfigurationsdateien hinzufügen.
Standardmuster für die Codeüberprüfung
Wenn keine benutzerdefinierten Styleguides angegeben sind, konzentriert sich Gemini Code Assist bei der Codeüberprüfung auf die folgenden Hauptkategorien:
Korrektheit: Stellt sicher, dass der Code wie vorgesehen funktioniert und Grenzfälle behandelt, und prüft auf Logikfehler, Race Conditions oder eine falsche API-Nutzung.
Effizienz: Erkennt potenzielle Leistungsengpässe oder Bereiche für die Optimierung, z. B. übermäßige Schleifen, Speicherlecks, ineffiziente Datenstrukturen, redundante Berechnungen, übermäßige Protokollierung und ineffiziente Stringbearbeitung.
Wartbarkeit: Bewertet die Lesbarkeit und Modularität des Codes sowie die Einhaltung von Sprachkonventionen und Best Practices. Es werden schlechte Namen für Variablen, Funktionen und Klassen, fehlende Kommentare oder Dokumentation, komplexer Code, Code-Duplizierung, inkonsistente Formatierung und Magic Numbers erkannt.
Sicherheit: Hier werden potenzielle Sicherheitslücken bei der Datenverarbeitung oder Eingabevalidierung identifiziert, z. B. unsichere Speicherung sensibler Daten, Injection-Angriffe, unzureichende Zugriffssteuerung, Cross-Site Request Forgery (CSRF) und Insecure Direct Object References (IDOR).
Sonstiges: Bei der Überprüfung des Pull-Requests werden auch andere Themen berücksichtigt, z. B. Tests, Leistung, Skalierbarkeit, Modularität und Wiederverwendbarkeit sowie Fehlerprotokollierung und ‑monitoring.
Konfigurationsdateien hinzufügen
Sie können das Verhalten von Gemini Code Assist ändern, indem Sie unterstützte Konfigurationsdateien in einen .gemini/-Ordner im Stammverzeichnis Ihres Repositorys einfügen. Gemini Code Assist verwendet die folgenden Dateien, wenn Sie sie dem Ordner .gemini/ hinzugefügt haben:
config.yaml: Eine Datei mit verschiedenen konfigurierbaren Funktionen, die Sie aktivieren oder deaktivieren können. Dazu gehört auch das Angeben von Dateien, die mit Glob-Mustern ignoriert werden sollen.styleguide.md: Eine Markdown-Datei, die Gemini Code Assist mit bestimmten Regeln anweist, die bei der Codeüberprüfung befolgt werden sollen.
config.yaml-Beispiel
Das folgende Code-Snippet ist ein Beispiel für eine config.yaml-Datei. In diesem Beispiel ist jede Property auf den Standardwert festgelegt, der von Gemini Code Assist verwendet wird. Sie können dieses Snippet als Vorlage verwenden, um Ihre eigene config.yaml-Datei zu erstellen:
have_fun: false
memory_config:
disabled: false
code_review:
disable: false
comment_severity_threshold: MEDIUM
max_review_comments: -1
pull_request_opened:
help: false
summary: true
code_review: true
include_drafts: true
ignore_patterns: []
config.yaml Schema
Das folgende Code-Snippet ist das Schema für die Datei config.yaml. Darin sind alle möglichen Konfigurationsoptionen und ihre zulässigen Werte definiert:
$schema: "http://json-schema.org/draft-07/schema#" title: RepoConfig description: Configuration for Gemini Code Assist on a repository. All fields are optional and have default values. type: object properties: have_fun: type: boolean description: Enables fun features such as a poem in the initial pull request summary. Default: false. ignore_patterns: type: array items: type: string description: A list of glob patterns for files and directories that Gemini Code Assist should ignore. Files matching any pattern in this list will be skipped during interactions. Default: []. memory_config: type: object description: Configuration for persistent memory, which is used to improve responses. properties: disabled: type: boolean description: Whether to disable persistent memory for this specific repository, if persistent memory has been enabled for multiple repositories. Default: false. code_review: type: object description: Configuration for code reviews. All fields are optional and have default values. properties: disable: type: boolean description: Disables Gemini from acting on pull requests. Default: false. comment_severity_threshold: type: string enum: - LOW - MEDIUM - HIGH - CRITICAL description: The minimum severity of review comments to consider. Default: MEDIUM. max_review_comments: type: integer format: int64 description: The maximum number of review comments to consider. Use -1 for unlimited. Default: -1. pull_request_opened: type: object description: Configuration for pull request opened events. All fields are optional and have default values. properties: help: type: boolean description: Posts a help message on pull request open. Default: false. summary: type: boolean description: Posts a pull request summary on the pull request open. Default: true. code_review: type: boolean description: Posts a code review on pull request open. Default: true. include_drafts: type: boolean description: Enables agent functionality on draft pull requests. Default: true.
styleguide.md
Für die Datei styleguide.md ist kein Schema definiert. Stattdessen ist es eine Beschreibung in natürlicher Sprache, wie Sie möchten, dass Gemini Code Assist seine Code-Reviews strukturiert. Das folgende Code-Snippet ist ein Beispiel für eine styleguide.md-Datei:
# Company X Python Style Guide
# Introduction
This style guide outlines the coding conventions for Python code developed at Company X.
It's based on PEP 8, but with some modifications to address specific needs and
preferences within our organization.
# Key Principles
* **Readability:** Code should be easy to understand for all team members.
* **Maintainability:** Code should be easy to modify and extend.
* **Consistency:** Adhering to a consistent style across all projects improves
collaboration and reduces errors.
* **Performance:** While readability is paramount, code should be efficient.
# Deviations from PEP 8
## Line Length
* **Maximum line length:** 100 characters (instead of PEP 8's 79).
* Modern screens allow for wider lines, improving code readability in many cases.
* Many common patterns in our codebase, like long strings or URLs, often exceed 79 characters.
## Indentation
* **Use 4 spaces per indentation level.** (PEP 8 recommendation)
## Imports
* **Group imports:**
* Standard library imports
* Related third party imports
* Local application/library specific imports
* **Absolute imports:** Always use absolute imports for clarity.
* **Import order within groups:** Sort alphabetically.
## Naming Conventions
* **Variables:** Use lowercase with underscores (snake_case): `user_name`, `total_count`
* **Constants:** Use uppercase with underscores: `MAX_VALUE`, `DATABASE_NAME`
* **Functions:** Use lowercase with underscores (snake_case): `calculate_total()`, `process_data()`
* **Classes:** Use CapWords (CamelCase): `UserManager`, `PaymentProcessor`
* **Modules:** Use lowercase with underscores (snake_case): `user_utils`, `payment_gateway`
## Docstrings
* **Use triple double quotes (`"""Docstring goes here."""`) for all docstrings.**
* **First line:** Concise summary of the object's purpose.
* **For complex functions/classes:** Include detailed descriptions of parameters, return values,
attributes, and exceptions.
* **Use Google style docstrings:** This helps with automated documentation generation.
```python
def my_function(param1, param2):
"""Single-line summary.
More detailed description, if necessary.
Args:
param1 (int): The first parameter.
param2 (str): The second parameter.
Returns:
bool: The return value. True for success, False otherwise.
Raises:
ValueError: If `param2` is invalid.
"""
# function body here
```
## Type Hints
* **Use type hints:** Type hints improve code readability and help catch errors early.
* **Follow PEP 484:** Use the standard type hinting syntax.
## Comments
* **Write clear and concise comments:** Explain the "why" behind the code, not just the "what".
* **Comment sparingly:** Well-written code should be self-documenting where possible.
* **Use complete sentences:** Start comments with a capital letter and use proper punctuation.
## Logging
* **Use a standard logging framework:** Company X uses the built-in `logging` module.
* **Log at appropriate levels:** DEBUG, INFO, WARNING, ERROR, CRITICAL
* **Provide context:** Include relevant information in log messages to aid debugging.
## Error Handling
* **Use specific exceptions:** Avoid using broad exceptions like `Exception`.
* **Handle exceptions gracefully:** Provide informative error messages and avoid crashing the program.
* **Use `try...except` blocks:** Isolate code that might raise exceptions.
# Tooling
* **Code formatter:** [Specify formatter, e.g., Black] - Enforces consistent formatting automatically.
* **Linter:** [Specify linter, e.g., Flake8, Pylint] - Identifies potential issues and style violations.
# Example
```python
"""Module for user authentication."""
import hashlib
import logging
import os
from companyx.db import user_database
LOGGER = logging.getLogger(__name__)
def hash_password(password: str) -> str:
"""Hashes a password using SHA-256.
Args:
password (str): The password to hash.
Returns:
str: The hashed password.
"""
salt = os.urandom(16)
salted_password = salt + password.encode('utf-8')
hashed_password = hashlib.sha256(salted_password).hexdigest()
return f"{salt.hex()}:{hashed_password}"
def authenticate_user(username: str, password: str) -> bool:
"""Authenticates a user against the database.
Args:
username (str): The user's username.
password (str): The user's password.
Returns:
bool: True if the user is authenticated, False otherwise.
"""
try:
user = user_database.get_user(username)
if user is None:
LOGGER.warning("Authentication failed: User not found - %s", username)
return False
stored_hash = user.password_hash
salt, hashed_password = stored_hash.split(':')
salted_password = bytes.fromhex(salt) + password.encode('utf-8')
calculated_hash = hashlib.sha256(salted_password).hexdigest()
if calculated_hash == hashed_password:
LOGGER.info("User authenticated successfully - %s", username)
return True
else:
LOGGER.warning("Authentication failed: Incorrect password - %s", username)
return False
except Exception as e:
LOGGER.error("An error occurred during authentication: %s", e)
return False
```
Konfigurationen in mehreren Repositories verwalten
Einige Aspekte von Gemini Code Assist auf GitHub können für mehrere Repositorys verwaltet werden:
Wenn Sie die Privatnutzerversion haben, können Sie bestimmte Einstellungen für alle mit einem Konto verknüpften Repositories aktivieren oder deaktivieren.
Wenn Sie die Enterprise-Version haben, können Sie bestimmte Einstellungen für mehrere Repositories ein- und ausschalten und einen Styleguide auf mehrere Repositories anwenden. Repositories werden nach Developer Connect-Verbindung gruppiert. Die Verwaltung der gemeinsamen Einstellungen und des Styleguides erfolgt über die Google Cloud Console.
Wenn ein Repository als Teil einer Gruppe verwaltet wird, aber auch eigene config.yaml oder styleguide.md hat, gilt Folgendes:
Die
config.yaml-Einstellungen des Repositorys überschreiben die Gruppeneinstellungen.- Die Einstellung Antwortqualität verbessern kann nicht über die Datei
config.yamlaktiviert werden, sondern nur über die Gruppeneinstellungen. Dieconfig.yaml-Datei eines Repositorys kann jedoch so festgelegt werden, dass die Einstellung Antwortqualität verbessern deaktiviert wird. Diese Einstellung hat Vorrang vor allen Gruppeneinstellungen.
- Die Einstellung Antwortqualität verbessern kann nicht über die Datei
Die
styleguide.mddes Repositorys wird mit dem Gruppen-Styleguide kombiniert.
In den folgenden Schritten wird gezeigt, wie Sie eine Reihe von Konfigurationen und für Nutzer der Enterprise-Version einen Styleguide für mehrere Repositorys steuern. Bei diesen Schritten wird davon ausgegangen, dass Sie Gemini Code Assist auf GitHub bereits eingerichtet haben.
Nutzer
Rufen Sie in Gemini Code Assist die Seite Code-Überprüfung auf.
Wenn Sie dazu aufgefordert werden, klicken Sie auf Log in with GitHub (Mit GitHub anmelden) und folgen Sie der Anleitung, um sich in Gemini Code Assist bei GitHub anzumelden.
Wählen Sie auf der Seite Gemini das Konto aus, mit dem Sie arbeiten möchten, lesen Sie die Nutzungsbedingungen und klicken Sie auf Weiter.
Aktualisieren Sie auf der Seite Free Agent die Einstellungen nach Bedarf.
Klicken Sie auf Speichern.
Unternehmen
Rufen Sie in der Google Cloud Console die Seite Agents & Tools für Gemini Code Assist auf.
Suchen Sie im Bereich Agents (Agents) die Karte Code Assist Source Code Management (Code Assist-Quellcodeverwaltung) und klicken Sie auf Advanced (Erweitert).
Der Bereich Code Assist für die Quellcodeverwaltung bearbeiten wird geöffnet.
Klicken Sie in der Tabelle Verbindungen auf den Namen der Verbindung, auf die Sie eine Konfiguration oder einen Styleguide anwenden möchten.
Die Detailseite für die Verbindung wird geöffnet.
Aktualisieren Sie auf dem Tab Einstellungen die Einstellungen, die Sie ändern möchten.
Fügen Sie auf dem Tab Styleguide den Styleguide hinzu, der für die mit dieser Verbindung verknüpften Repositories verwendet werden soll.
Klicken Sie auf Speichern.