Введение
Cursor — это IDE нового поколения, построенная на базе VS Code и глубоко интегрированная с AI-моделями (GPT-4o, Claude 3.5 Sonnet и другими). В отличие от обычных автодополнений, Cursor умеет анализировать контекст всего проекта, предлагать рефакторинг и даже генерировать целые модули по текстовому описанию. Однако без правильных промтов даже лучшая модель выдаёт посредственные результаты.
В этой подборке я собрал 12 проверенных промтов для трёх режимов работы Cursor:
- Chat (встроенный чат с AI)
- Inline Completions (автодополнение кода)
- Command mode (команды через Cmd+K / Ctrl+K)
Каждый промт сопровождается примером использования и фрагментом кода, чтобы вы могли сразу применить его в своём проекте.
1. Базовые промты для автодополнения (Inline Completions)
1.1. Генерация функции по комментарию
Задача: Создать функцию, которая валидирует email-адрес.
Промт (комментарий перед кодом):
// validateEmail: принимает строку, возвращает boolean, проверяет корректность email с помощью regex и возвращает true/false
Пример результата:
function validateEmail(email: string): boolean {
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
return emailRegex.test(email);
}
Совет: Для сложных функций добавляйте в комментарий информацию о типах аргументов, возвращаемом значении и краевых случаях.
1.2. Дополнение существующей функции
Задача: Дописать метод, который сортирует массив объектов по заданному полю.
Промт (пишем начало функции, Cursor предлагает завершение):
function sortByField<T>(items: T[], field: keyof T, order: 'asc' | 'desc' = 'asc'): T[] {
// здесь Cursor сам предложит реализацию
Пример результата (предложение Cursor):
function sortByField<T>(items: T[], field: keyof T, order: 'asc' | 'desc' = 'asc'): T[] {
return [...items].sort((a, b) => {
if (a[field] < b[field]) return order === 'asc' ? -1 : 1;
if (a[field] > b[field]) return order === 'asc' ? 1 : -1;
return 0;
});
}
Совет: Чтобы получить более точное дополнение, напишите сигнатуру функции с дженериками — Cursor учитывает типы.
2. Промты для чата (Chat)
2.1. Объяснение кода
Задача: Понять, что делает сложная функция.
Промт:
Объясни, что делает этот код, построчно. Укажи, какие побочные эффекты есть и как их избежать.
[вставьте код]
Пример результата:
AI выдаёт разбор: строка 1 — объявление функции, строка 2 — мутация переданного объекта (побочный эффект), рекомендация — создать копию через spread-оператор.
2.2. Рефакторинг с улучшением читаемости
Задача: Упростить спагетти-код.
Промт:
Отрефактори этот код: разбей на маленькие функции, используй ранний return, убери дублирование. Сохрани ту же логику.
[вставьте код]
Пример результата:
Исходный код из 50 строк с вложенными if-else превращается в 5 коротких функций с понятными названиями.
2.3. Генерация юнит-тестов
Задача: Написать тесты для функции.
Промт:
Напиши юнит-тесты на Jest для этой функции. Покрой обычные случаи, граничные значения и ошибки.
[вставьте код]
Пример результата:
describe('validateEmail', () => {
it('should return true for valid email', () => {
expect(validateEmail('test@example.com')).toBe(true);
});
it('should return false for email without @', () => {
expect(validateEmail('testexample.com')).toBe(false);
});
it('should return false for empty string', () => {
expect(validateEmail('')).toBe(false);
});
});
3. Продвинутые промты для командного режима (Cmd+K)
3.1. Исправление ошибок с контекстом
Задача: Починить баг на основе ошибки из консоли.
Промт (в командной строке Cursor):
fix: Uncaught TypeError: Cannot read properties of undefined (reading 'map') in component UserList. Используй optional chaining и проверку на null.
Пример результата:
Cursor заменяет users.map(...) на users?.map(...) ?? [] и добавляет проверку на пустой массив.
3.2. Добавление логирования в сложный метод
Задача: Вставить логирование в каждый catch-блок.
Промт:
add logging: вставь console.error с сообщением и объектом ошибки в каждый catch-блок этого метода. Сообщение должно включать имя метода.
Пример результата:
try {
// ...
} catch (error) {
console.error('fetchUserData failed:', error);
}
3.3. Оптимизация производительности
Задача: Улучшить скорость выполнения функции.
Промт:
optimize: замени forEach на for-of, вынеси повторяющиеся вычисления в константы, используй Map вместо объекта для поиска.
Пример результата:
Cursor переписывает функцию, уменьшая временную сложность с O(n²) до O(n).
4. Экспертные промты для работы с архитектурой
4.1. Генерация компонента React с TypeScript
Задача: Создать DataTable с сортировкой, фильтрацией и пагинацией.
Промт (Chat):
Создай компонент DataTable на React + TypeScript. Пропсы: columns (массив объектов с key, label, sortable), data (массив объектов). Реализуй: сортировку по клику на заголовок, текстовый фильтр, пагинацию по 10 строк. Используй useMemo и useCallback для оптимизации.
Пример результата:
Компонент размером ~100 строк с хуками, который можно сразу вставить в проект.
4.2. Написание миграции базы данных
Задача: Создать SQL-миграцию для добавления таблицы.
Промт:
Напиши SQL-миграцию (PostgreSQL) для создания таблицы 'orders' с полями: id (UUID, PK), user_id (UUID, FK -> users), total (DECIMAL, NOT NULL), status (ENUM: pending, paid, shipped, cancelled), created_at (TIMESTAMP, default NOW()). Добавь индексы на user_id и status.
Пример результата:
CREATE TYPE order_status AS ENUM ('pending', 'paid', 'shipped', 'cancelled');
CREATE TABLE orders (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL REFERENCES users(id),
total DECIMAL(10,2) NOT NULL,
status order_status NOT NULL DEFAULT 'pending',
created_at TIMESTAMP DEFAULT NOW()
);
CREATE INDEX idx_orders_user_id ON orders(user_id);
CREATE INDEX idx_orders_status ON orders(status);
4.3. Рефакторинг легаси-кода на современный стандарт
Задача: Переписать классовый компонент React на функциональный с хуками.
Промт:
Перепиши этот классовый компонент на функциональный с useState и useEffect. Сохрани всю логику жизненного цикла.
[вставьте код]
Пример результата:
AI преобразует componentDidMount в useEffect с пустыми зависимостями, а this.setState — в вызов setState из хука.
5. Промты для работы с документацией и код-ревью
5.1. Генерация JSDoc-комментариев
Задача: Добавить документацию ко всем экспортируемым функциям.
Промт (Cmd+K):
doc: добавь JSDoc комментарии ко всем экспортируемым функциям и интерфейсам. Опиши параметры, возвращаемое значение и пример использования.
Пример результата:
/**
* Валидирует email-адрес.
* @param email - Строка с email.
* @returns true, если email корректен, иначе false.
* @example
* validateEmail('user@example.com') // true
*/
export function validateEmail(email: string): boolean { ... }
5.2. Подготовка к код-ревью
Задача: Найти потенциальные проблемы в коде.
Промт (Chat):
Проведи код-ревью этого PR: найди проблемы с производительностью, утечки памяти, необработанные ошибки, нарушения code style. Дай рекомендации по улучшению.
[вставьте код]
Пример результата:
AI указывает на отсутствие очистки таймеров в useEffect, рекомендует добавить return с clearInterval, а также предлагает заменить var на const/let.
6. Промты для работы с несколькими файлами
6.1. Создание эндпоинта API с сервисом и контроллером
Задача: Сгенерировать CRUD для сущности.
Промт (Chat с @file ссылкой на схему):
На основе модели User (файл models/user.ts) создай CRUD-эндпоинты в Express: GET /users, GET /users/:id, POST /users, PUT /users/:id, DELETE /users/:id. Используй сервисный слой и контроллер. Добавь валидацию через Joi.
Пример результата:
Создаются файлы users.controller.ts, users.service.ts, users.validator.ts с полной реализацией.
6.2. Рефакторинг с разделением на модули
Задача: Разбить большой файл на несколько.
Промт:
Разбей файл utils.ts на три отдельных модуля: string.ts, array.ts, date.ts. Перенеси соответствующие функции, обнови импорты во всём проекте.
Пример результата:
Cursor создаёт файлы и автоматически изменяет импорты во всех файлах проекта, которые используют утилиты.
Заключение
Эти 12 промтов покрывают 90% повседневных задач разработчика: от быстрого автодополнения до рефакторинга архитектуры целого проекта. Главное — помнить: чем точнее и контекстнее промт, тем качественнее результат. Не бойтесь экспериментировать: добавляйте в промты ссылки на файлы (@file), указывайте конкретные библиотеки и версии. Cursor — это инструмент, который усиливает ваши навыки, но не заменяет их. Используйте AI как продвинутого напарника, а не как чёрный ящик.
Если вы хотите глубже изучить Cursor и получить больше готовых промтов для разных сценариев, заглядывайте в блог asibiont.com — там мы регулярно публикуем практические гайды по AI-assisted разработке.
Комментарии