Сценарий 17: Расширенное редактирование файлов¶
Разработчик, выполняющий точные изменения кода на основе AST с поддержкой предпросмотра и отмены.
Быстрый старт¶
/select 17
Обзор¶
Сценарий 17 предоставляет возможности хирургического редактирования кода с использованием парсинга AST (Abstract Syntax Tree). В отличие от простой замены текста, редактирование на основе AST понимает структуру кода, сохраняет форматирование и гарантирует синтаксически корректные изменения.
Варианты использования¶
Поиск целей для редактирования¶
Поиск конкретных функций, классов или методов для редактирования:
> Найти функцию heap_insert в src/backend/access/heap/heapam.c
╭─────────────── Найдена цель кода ─────────────────────────╮
│ │
│ Имя: heap_insert │
│ Тип: функция │
│ Файл: src/backend/access/heap/heapam.c │
│ Строки: 2156-2298 │
│ │
│ ```c │
│ void heap_insert(Relation relation, │
│ HeapTuple tup, │
│ CommandId cid, │
│ int options, │
│ BulkInsertState bistate) │
│ { │
│ ... │
│ } │
│ ``` │
│ │
╰────────────────────────────────────────────────────────────╯
Предпросмотр изменений с Diff¶
Генерация унифицированного diff-предпросмотра перед применением изменений:
> Редактировать функцию validate_input для добавления проверки границ
╭─────────────── Предпросмотр редактирования ──────────────╮
│ │
│ Цель: validate_input (функция) │
│ Файл: src/utils/validation.c:45-67 │
│ │
│ Изменения: │
│ ```diff │
│ @@ -45,6 +45,10 @@ │
│ bool validate_input(const char *input, size_t len) │
│ { │
│ + /* Проверка границ */ │
│ + if (len > MAX_INPUT_SIZE) { │
│ + return false; │
│ + } │
│ if (input == NULL) { │
│ return false; │
│ } │
│ ``` │
│ │
│ Используйте `/edit apply` для применения изменений. │
│ │
╰────────────────────────────────────────────────────────────╯
Применение редактирования с резервным копированием¶
Применение изменений с автоматическим созданием резервной копии:
> Применить редактирование
╭─────────────── Редактирование применено ─────────────────╮
│ │
│ Статус: УСПЕШНО │
│ Файл: src/utils/validation.c │
│ Резервная копия: src/utils/validation.c.bak.20241209_143521│
│ │
│ Применённые изменения: │
│ - Добавлена проверка границ (4 строки) │
│ │
│ Используйте `/edit undo` для отмены изменений. │
│ │
╰────────────────────────────────────────────────────────────╯
Редактирование на основе AST¶
Поддерживаемые типы целей¶
| Тип | Описание | Пример |
|---|---|---|
function |
Автономные функции | heap_insert, main |
method |
Методы класса | MyClass.process |
class |
Определения классов | TransactionManager |
struct |
Определения структур | HeapTupleData |
Режимы редактирования¶
| Режим | Описание | Вариант использования |
|---|---|---|
replace |
Заменить всю цель | Переписать логику функции |
insert_before |
Вставить код перед целью | Добавить импорты, объявления |
insert_after |
Вставить код после цели | Добавить новые методы |
delete |
Удалить цель | Удалить устаревший код |
rename |
Переименовать идентификатор | Рефакторинг именования |
Операция переименования¶
> Переименовать класс OldManager в NewManager
╭─────────────── Предпросмотр переименования ──────────────╮
│ │
│ Переименование: OldManager -> NewManager │
│ │
│ Затронутые файлы (3): │
│ src/core/manager.py:15,23,45,67 │
│ src/api/handlers.py:12,34 │
│ tests/test_manager.py:8,19,31 │
│ │
│ Всего замен: 9 │
│ │
│ Используйте `/edit apply` для применения переименования. │
│ │
╰────────────────────────────────────────────────────────────╯
Команды CLI¶
Поиск целей¶
# Найти функцию по имени
codegraph edit find --target heap_insert --file src/heap.c
# Найти все функции по шаблону
codegraph edit find --pattern "validate_*" --type function
# Найти определение класса
codegraph edit find --target MyClass --type class
Применение редактирования¶
# Применить редактирование с предпросмотром
codegraph edit apply --file src/file.c --target func_name --preview
# Применить редактирование немедленно
codegraph edit apply --file src/file.c --target func_name --new-code @patch.txt
# Переименовать идентификатор во всех файлах
codegraph edit rename --old OldName --new NewName --scope src/
Операции отмены¶
# Показать историю редактирований
codegraph edit history
# Отменить последнее редактирование
codegraph edit undo
# Отменить конкретное редактирование по ID
codegraph edit undo --id edit_abc123
Команды TUI¶
| Команда | Описание |
|---|---|
/edit find <цель> |
Найти цель кода |
/edit preview |
Показать ожидающие изменения |
/edit apply |
Применить ожидающие изменения |
/edit undo |
Отменить последнее редактирование |
/edit history |
Показать историю редактирований |
Примеры вопросов¶
- “Найти функцию heap_insert в src/heap.c”
- “Редактировать функцию validate_input для добавления проверки null”
- “Переименовать класс TransactionHandler в TxHandler”
- “Удалить неиспользуемую функцию old_helper”
- “Вставить логирование перед функцией process_request”
- “Показать текущий предпросмотр редактирования”
Интеграция с другими сценариями¶
Сценарий 17 интегрируется с:
- S18 (Оптимизация кода): Применение предложений по оптимизации
- S19 (Проверка стандартов): Исправление нарушений стандартов
- S05 (Рефакторинг): Выполнение планов рефакторинга
> /select 18
> Оптимизировать src/core/
# После просмотра предложений...
> Применить предложение opt_001
# Это вызывает S17 для фактического редактирования
Пример рабочего процесса¶
# 1. Найти цель
> Найти функцию process_data в src/processor.py
# 2. Просмотреть код
> Показать полную реализацию
# 3. Запросить редактирование
> Добавить обработку ошибок для пустого ввода
# 4. Предпросмотр изменений
> /edit preview
# 5. Применить изменения
> /edit apply
# 6. Проверить
> Показать обновлённую функцию
Связанные сценарии¶
- Рефакторинг - Очистка и рефакторинг кода
- Оптимизация кода - Оптимизация с помощью ИИ
- Массовый рефакторинг - Масштабные изменения