12

Gemini-cli. Часть 3. Интеграция с vs code

Серия gemini-cli

Первая часть:

Gemini CLI: Знакомство и первые шаги

Вторая часть:

Gemini CLI: Продвинутые техники и автоматизация сценариев (Часть 2)

В этой части мы попросим gemini-cli написать код игры life, создать тесты и документацию.

Шаг 1: Создание системной инструкции `GEMINI.MD

В рабочей директории создайте файл GEMINI.md и вставьте в него системную инструкцию. Пример инструкции:

## 📘 Инструкция для генерации Python-кода

### 1. Общие правила

* Используй **Python 3.10+**.

* Соблюдай **четкий, читаемый и однозначный стиль** кодирования.

* **Каждая функция, метод и класс** должны иметь:

* Аннотацию типов (`type hints`)

* Полную и корректную документацию в формате `docstring` (см. раздел 3)

* Внутренние комментарии (`#`), где необходимо

---

### 2. Комментарии

* Комментарии должны быть **точными** и описывать **что делает код**, а не «что мы делаем».

* **Запрещено** использовать местоимения: `делаем`, `возвращаем`, `отправляем`, `переходим` и т.п.

* **Разрешены** только термины: `извлечение`, `выполнение`, `вызов`, `замена`, `проверка`, `отправка`, `Функция выполняет`, `Функция изменяет значение` и т.д.

#### ❌ Пример неправильного комментария:

```python

# Получаем значение параметра

✅ Пример правильного комментария:

# Функция извлекает значение параметра

3. Docstring (формат документации)

Каждая функция/метод/класс должна содержать docstring в следующем формате:

def function(param: str, param1: Optional[str | dict | str] = None) -> dict | None:

"""

Args:

param (str): Описание параметра `param`.

param1 (Optional[str | dict | str], optional): Описание параметра `param1`. По умолчанию `None`.

Returns:

dict | None: Описание возвращаемого значения. Возвращает словарь или `None`.

Raises:

SomeError: Описание ситуации, в которой возникает исключение `SomeError`.

Example:

>>> function('param', 'param1')

{'param': 'param1'}

"""

Все параметры и возвращаемые значения должны быть описаны.

Формулировки должны быть лаконичными, точными и однозначными.

Не допускается пропуск описания параметров/возвращаемых значений/исключений.

4. Аннотация типов

Все переменные, параметры и возвращаемые значения должны быть аннотированы.

Используй синтаксис Python 3.10+: list[int], dict[str, Any], str | None и т.д.

Примеры корректных аннотаций:

✅ Простые типы:

name: str = "John"

count: int = 42

flag: bool = True

✅ Коллекции и сложные типы:

from typing import Any, Optional, Callable, TypeAlias

coordinates: tuple[float, float] = (55.75, 37.61)

metadata: dict[str, Any] = {"debug": True}

UserId: TypeAlias = int

✅ Функции и методы:

def get_user_name(user_id: int) -> str:

"""Возвращает имя пользователя по его идентификатору."""

...

✅ Асинхронные функции:

async def fetch_users() -> AsyncIterator[dict[str, int | str]]:

...

✅ Обобщённые типы:

from typing import TypeVar, Generic

T = TypeVar("T")

class Container(Generic[T]):

def __init__(self, value: T) -> None:

self.value = value

def get(self) -> T:

return self.value

5. Прочее

Используй default_factory в dataclass для изменяемых значений (list, dict).

Для Optional значений указывай T | None (Python 3.10+) или Optional[T].

Для сложных структур — используй TypeAlias.

📌 Подсказка: При генерации кода всегда включай аннотацию типов, docstring, и избегай субъективных формулировок в комментариях. Цель — максимально точная, воспроизводимая и формализованная структура кода.

Для удобства создадим директорию `game`, в которой будут храниться файлы проекта, и директорию `scenarios`, где будут храниться сценарии для Gemini CLI.

файл scenarios/life-create-code.md будет содержать инструкции для создания кода игры "Жизнь",

файл scenarios/life-create-test.md — инструкции для создания тестов,

а файл scenarios/life-create-doc.md — инструкции для создания документации.

life-create-code.md:



Внутри директории `game` Создай файл life.py.

Внутри напиши реализацию "Игры Жизнь" Конвея на Python, используя объектно-ориентированный подход.

используй библиотеки: `numpy`, `pygame` (для графики).

Требования:

1. Создай класс `Game`.

2. В `__init__` класс должен принимать размеры сетки (ширину, высоту) и создавать случайное начальное поле.

3. Создай метод `step()`, который обновляет состояние игры на один шаг в соответствии с правилами:

- Живая клетка с < 2 живыми соседями умирает (одиночество).

- Живая клетка с 2 или 3 живыми соседями выживает.

- Живая клетка с > 3 живыми соседями умирает (перенаселение).

- Мёртвая клетка с ровно 3 живыми соседями становится живой (рождение).

4. Создай метод `display()` или переопредели `__str__`, чтобы выводить поле в консоль. Используй символы, например '■' для живой клетки и ' ' для мертвой.

5. Используй библиотеку `numpy` для эффективной работы с сеткой.

6. В блоке `if __name__ == '__main__':` добавь пример, который создает игру, и в цикле запускает симуляцию с небольшой задержкой между шагами.

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

life-create-test.md:

Внутри директории `game` используя контекст из файла @life.py, создай файл с тестами test_life.py. Используй фреймворк pytest. Тест должен проверять правильность эволюции простого осциллятора "Блинкер" (три клетки в ряд).
Сценарий теста:
1. Импортируй класс `Game` из `life`.
2. Создай функцию теста, например `test_blinker_oscillation`.
3. Внутри теста создай экземпляр `Game` с фиксированным размером (например, 5x5).
4. Вручную установи начальное состояние поля так, чтобы в центре была горизонтальная линия из трех живых клеток (Блинкер).
5. Вызови метод `game.step()`.
6. С помощью `assert` и `numpy.array_equal` проверь, что поле изменилось на вертикальную линию из трех клеток.
7. Вызови метод `game.step()` еще раз.
8. Проверь, что поле вернулось в исходное горизонтальное состояние.

life-create-doc.md:

Проанализируй файлы @life.py и @test_life.py внутри директории `game` и на их основе создай файл документации doc.md. Структура документации должна быть следующей: - **Заголовок:**
# Проект "Игра Жизнь" -
**Краткое описание:** Объяснение, что это за проект (реализация клеточного автомата Конвея). -
**Структура файлов:** Краткое описание назначения файлов `life.py` и `test_life.py`. - **Как запустить симуляцию:** Раздел с командой для запуска основного файла (`python life.py`). -
**Как запустить тесты:** Раздел с командой для запуска тестов (`pip install pytest numpy`, а затем `pytest`).

Структура директорий будет выглядеть следующим образом:

Шаг 2: Создание кода игры "Жизнь"

Запускаем gemini-cli в терминале:

Важно! Убедитесь, что вы находитесь в директории, где находится файл GEMINI.md.

<!--noindex--><a href="https://pikabu.ru/story/geminicli_chast_3_integratsiya_s_vs_code_13002112?u=http%3A%2F%2FGEMINI.md&t=GEMINI.md&h=ae11348cfc4452a684ff9614912f5be1f80f70b6" title="http://GEMINI.md" target="_blank" rel="nofollow noopener">GEMINI.md</a><!--/noindex--> обнаружен

GEMINI.md обнаружен

Даем команду на исполнение сценариев

Даем команду на исполнение сценариев

Даем разрешение на создание файла

Даем разрешение на создание файла

После этого gemini-cli сгенерирует файл life.py в директории game:

Продолжаем:


Создай виртуальную среду venv, установи необходимые зависимости и запусти испонение кода игры

Даем необходимые разрешения на запуск скриптов

Даем необходимые разрешения на запуск скриптов

pip

pip

и наконец gemini-cli запускает игру:


Шаг 3: Создание тестов

Даем разрешение на запуск pytest

Даем разрешение на запуск pytest

Ошибка

gemini-cli пытается решить проблему

Последний шаг — создание документации

Вуаля! Документация создана:

Проект на github

Полезно? Подпишись.
Понравилось — ставь «+»
Удачи! 🚀

UPD:

А давайте встроим ии в powershell

Лига программистов

2.2K пост11.9K подписчиков

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества