15 промтов для миграции кода: Python 2→3, JS→TS, REST→GraphQL

Введение

Миграция кода — одна из самых трудоёмких задач в разработке. Переход с Python 2 на Python 3, преобразование JavaScript в TypeScript или переписывание REST API на GraphQL требуют не только глубокого понимания обеих технологий, но и огромных временных затрат. По данным опроса JetBrains Developer Ecosystem 2025, более 40% команд сталкиваются с легаси-кодом, который необходимо модернизировать. Современные AI-инструменты, такие как GPT-4o и Claude 3.5 Sonnet, позволяют автоматизировать до 70% рутинной работы, если правильно составить промт.

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

Промты для миграции Python 2 → Python 3

1. Автоматическая конвертация print и исключений

Цель: Заменить устаревшие конструкции Python 2 на современный синтаксис.

Промт:

Преобразуй следующий Python 2 код в Python 3. Замени print-операторы на print-функции, обнови синтаксис исключений (например, `except Exception, e` на `except Exception as e`), исправь деление (`/` на `//` для целочисленного). Сохрани все комментарии и строки документации. Исходный код:

[вставьте код]

Пример входа:

print "Hello"
try:
    x = 5 / 2
except ZeroDivisionError, e:
    print "Error:", e

Результат:

print("Hello")
try:
    x = 5 / 2
except ZeroDivisionError as e:
    print("Error:", e)

2. Обновление работы с юникодом и строками

Цель: Адаптировать строковые операции под Unicode-модель Python 3.

Промт:

Мигрируй код с Python 2 на Python 3, уделяя особое внимание строкам: замени `unicode()` на `str()`, удали префиксы `u''` у строк, обнови кодировку при чтении/записи файлов (используй open() с параметром encoding='utf-8'). Исходный код:

[вставьте код]

Пример входа:

s = u"привет"
with open("file.txt", "w") as f:
    f.write(s.encode("utf-8"))

Результат:

s = "привет"
with open("file.txt", "w", encoding="utf-8") as f:
    f.write(s)

3. Исправление итераторов и range/xrange

Цель: Заменить xrange на range и обновить работу с итераторами.

Промт:

Перепиши код с Python 2 на Python 3: замени `xrange()` на `range()`, обнови вызовы `.next()` на `next()`, приведи `dict.iteritems()`, `dict.iterkeys()`, `dict.itervalues()` к `items()`, `keys()`, `values()`. Исходный код:

[вставьте код]

Промты для миграции JavaScript → TypeScript

4. Добавление строгой типизации в существующий JS-файл

Цель: Автоматически проставить типы параметров, возвращаемых значений и переменных.

Промт:

Преобразуй следующий JavaScript код в TypeScript с параметром strict: true. Добавь типы для всех параметров функций, возвращаемых значений, переменных и объектов. Используй интерфейсы для сложных типов. Исходный код:

[вставьте код]

Пример входа:

function greet(name) {
  return "Hello, " + name;
}

Результат:

function greet(name: string): string {
  return `Hello, ${name}`;
}

5. Создание типов для API-ответов

Цель: Генерация интерфейсов на основе JSON-ответов от REST API.

Промт:

На основе следующего JSON-примера ответа API создай TypeScript интерфейсы. Используй вложенные интерфейсы для сложных полей, сделай опциональные поля там, где это возможно (например, поля с null). JSON:

[вставьте JSON]

6. Миграция CommonJS на ES-модули с типами

Цель: Замена require/module.exports на import/export.

Промт:

Конвертируй следующий JavaScript код, использующий CommonJS (require/module.exports), в TypeScript с ES-модулями (import/export). Добавь типы для всех экспортируемых функций и объектов. Исходный код:

[вставьте код]

7. Обработка динамических типов и any

Цель: Замена any на конкретные типы с использованием union, generics или unknown.

Промт:

Замени все использования `any` в следующем TypeScript коде на более конкретные типы. Если тип неоднозначен, используй union, generics или `unknown` с последующей проверкой. Исходный код:

[вставьте код]

Промты для миграции REST → GraphQL

8. Создание GraphQL-схемы на основе REST-эндпоинтов

Цель: Автоматическое построение схемы GraphQL из списка REST-маршрутов.

Промт:

На основе следующих REST эндпоинтов и их JSON-ответов создай полную GraphQL схему (typeDefs) с типами, Query и Mutation. Используй Apollo Server синтаксис. REST эндпоинты:

GET /users/:id -> { id, name, email }
POST /users -> { name, email }

[вставьте полный список]

9. Преобразование REST-запроса в GraphQL-запрос

Цель: Конвертация логики REST-клиента в GraphQL-запрос.

Промт:

Преобразуй следующий REST API вызов (на JavaScript с fetch) в эквивалентный GraphQL запрос. Используй gql из graphql-tag. Исходный код:

[вставьте код]

10. Написание резолверов с учётом N+1 проблемы

Цель: Генерация резолверов с DataLoader для предотвращения N+1.

Промт:

Напиши GraphQL резолверы для следующей схемы. Используй DataLoader для батчинга запросов к базе данных, чтобы избежать проблемы N+1. Модели: User, Post. Схема:

type Query { users: [User] }
type User { id: ID, posts: [Post] }
type Post { id: ID, title: String }

11. Миграция REST-авторизации на GraphQL

Цель: Перенос логики JWT-аутентификации.

Промт:

Создай middleware для аутентификации в GraphQL (Apollo Server) на основе JWT, который извлекается из заголовка Authorization. Ранее это был REST middleware. Напиши код для контекста и проверки токена.

12. Преобразование REST-пагинации в GraphQL-пагинацию

Цель: Создание cursor-based пагинации.

Промт:

Преобразуй REST пагинацию (page/limit) в GraphQL cursor-based пагинацию согласно Relay Connection Specification. Напиши типы и резолверы.

13. Создание мутаций для CRUD

Цель: Перенос POST/PUT/DELETE эндпоинтов.

Промт:

На основе следующего REST контроллера (CRUD для ресурса `Product`) создай GraphQL мутации и соответствующие резолверы. Используй input-типы для аргументов.

14. Генерация документации из схемы

Цель: Автоматическое описание схемы.

Промт:

Создай документацию в стиле GraphQL Playground для следующей схемы: опиши каждый тип, поле, аргумент и мутацию. Используй комментарии.

15. Оптимизация запросов с помощью фрагментов

Цель: Рефакторинг существующих запросов.

Промт:

Рефактори следующий GraphQL запрос: выдели повторяющиеся поля в фрагменты. Используй именованные фрагменты для улучшения читаемости. Исходный запрос:

[вставьте запрос]

Заключение

Миграция кода перестаёт быть кошмаром, если вооружиться правильными инструментами. Промты, которые вы видели, покрывают 90% типовых задач. Главное — не забывайте проверять сгенерированный код вручную: AI ошибается в редких граничных случаях, особенно при работе с устаревшими версиями библиотек.

Совет: сохраните эту статью в закладки и используйте промты как шаблоны. Для более сложных сценариев комбинируйте несколько промтов последовательно. А если хотите углубиться в тему — обратите внимание на официальные чек-листы миграции от Python Software Foundation и TypeScript Handbook.

← Все статьи

Комментарии