Skip to content
| Marketplace
Sign in
Visual Studio Code>Education>Code RetypeNew to Visual Studio Code? Get it now.
Code Retype

Code Retype

Sergey Dushenkov

| (0) | Free
Retype important pieces of code by hand to actually understand them (great for reviewing AI-generated pull requests).
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Code Retype

Задумка: Хочется сделать расширение для vscode которое по определенной конфигурации (файлы + интервалы строк) (надо проработать формат) даст тебе переписать код руками в этих местах.

Зачем: упросить понимание важных участков кода для понимания проекта и pull request'ов которые делают нейросети. Переписывание кода требует большей концентрации и не позволяет по диагонали просматривать изменения.


Как это работает

  1. В корне проекта лежит .retype.json со списком участков (файл + диапазоны строк).
  2. Retype: Start Session открывает два редактора рядом:
    • слева оригинал (read-only зеркало файла), нужный диапазон подсвечен, текущая строка выделена ярче;
    • справа пустой редактор, в который вы перепечатываете участок строка за строкой. Подсветка синтаксиса, автоотступы и автозакрытие скобок работают как в обычном файле.
  3. Пока вы печатаете, строки сравниваются с оригиналом:
    • зелёная — совпала;
    • без подсветки — ещё набирается (является префиксом ожидаемой строки);
    • красная с волнистым подчёркиванием от первого расхождения — ошибка, при наведении показывается ожидаемая строка;
    • совпавшие строки в оригинале слева приглушаются.
  4. Вставка из буфера (Ctrl+V, Shift+Insert, контекстное меню, многострочные сниппеты) в правом редакторе блокируется и откатывается. Автодополнение коротких идентификаторов разрешено.
  5. Когда все строки совпали, участок отмечается выполненным, всплывает предложение перейти к следующему. Прогресс сохраняется в workspace и привязан к содержимому кода: если участок в файле поменялся, его придётся набрать заново.

Реальные файлы проекта расширение никогда не изменяет: правый редактор живёт в памяти (схема retype:), левый доступен только для чтения.

Формат конфига

.retype.json (допускаются комментарии и висячие запятые, в редакторе есть валидация по схеме):

{
  "targets": [
    // Короткая форма: путь:диапазоны через запятую. Строки нумеруются с 1, границы включительно.
    "src/parser.ts:12-40,55",

    // Развёрнутая форма
    { "file": "src/lexer.ts", "lines": "1-30" },
    { "file": "src/vm.ts", "lines": ["100-140", "203"], "note": "горячий цикл интерпретатора" }
  ]
}

Пути указываются относительно корня workspace. Поле note показывается в списке участков и в подсказке статус-бара.

Заполнять конфиг руками не обязательно:

  • Retype: Create Config from Git Diff — берёт добавленные строки из git diff (незакоммиченные изменения, последний коммит, текущая ветка против main/master, или произвольные аргументы вроде main...feature) и записывает их как участки. Это основной сценарий для ревью PR, написанных нейросетью. Lock-файлы, .min.js, .map, .svg и т.п. пропускаются (список — в настройке retype.gitDiffExclude). Если конфиг уже есть, предложит заменить или дополнить.
  • Retype: Add Selection to Config — выделите строки в любом файле проекта (или в левом окне с оригиналом), вызовите команду из палитры или контекстного меню, и диапазон допишется в конфиг.

Для агентов (Claude Code, Cursor и т.п.)

Конфиг — обычный JSON в корне проекта, поэтому агент может собрать его сам, без участия расширения: перечислить файлы и диапазоны, которые он считает ключевыми в своём PR. Файлов может быть сколько угодно, у каждого несколько диапазонов. Если .retype.json закоммитить вместе с PR, ревьюер получит готовый маршрут.

Готовый фрагмент для CLAUDE.md / системного промпта:

Когда заканчиваешь PR, создай или обнови .retype.json в корне репозитория.
Формат: {"targets": [{"file": "<путь от корня>", "lines": ["<от>-<до>", ...], "note": "<почему это важно>"}]}.
Строки нумеруются с 1, границы включительно. Включи только участки, которые ревьюеру
стоит понять по-настоящему: новую логику, инварианты, обработку ошибок. Не включай
тесты-заглушки, импорты и сгенерированный код. Суммарно не больше ~150 строк.

Альтернатива без участия агента: Retype: Create Config from Git Diff соберёт конфиг из всех добавленных строк PR, а лишнее можно вычистить руками.

Команды

Команда Что делает
Retype: Start Session Загружает конфиг и открывает первый незавершённый участок
Retype: Next Target / Previous Target Переход между участками (кнопки есть и в заголовке правого редактора)
Retype: Pick Target... Список всех участков с отметками о выполнении; открывается и по клику на статус-бар
Retype: Stop Session Закрывает окна сессии
Retype: Add Selection to Config Добавляет выделенные строки в конфиг
Retype: Create Config from Git Diff Генерирует конфиг из diff
Retype: Open Config Открывает .retype.json (создаёт шаблон, если его нет)
Retype: Reset Progress Забывает выполненные участки и набранный текст

Настройки

Настройка По умолчанию Смысл
retype.configPath .retype.json Путь к конфигу относительно корня workspace
retype.ignoreTrailingWhitespace true Не учитывать пробелы в конце строк
retype.ignoreLeadingWhitespace false Не учитывать отступы (для Python лучше оставить false)
retype.blockPaste true Блокировать вставку и многострочные вставки в редакторе набора
retype.maxInsertLength 30 Одиночная вставка длиннее этого числа символов считается пастой и откатывается
retype.gitDiffExclude lock-файлы, .min.js, .map, … Суффиксы путей, которые пропускаются при генерации из diff

Сборка и установка

С установленным Node.js:

npm install
npm run compile
npx @vscode/vsce package      # -> code-retype-0.1.0.vsix
code --install-extension code-retype-0.1.0.vsix

Без Node.js (используется Electron из самого VS Code и Python для упаковки; зависимости из node_modules уже должны быть на месте):

scripts/build.sh              # компиляция tsc через VS Code-овский Electron
scripts/package.py            # -> code-retype-0.1.0.vsix
code --install-extension code-retype-0.1.0.vsix

Для разработки: откройте папку в VS Code и нажмите F5 (Run Extension).

Сквозной тест (scripts/smoke.sh) поднимает отдельный экземпляр VS Code с расширением и прогоняет сценарий из test/smoke/index.js: старт сессии, откат вставки, набор строк с ошибкой и исправлением, завершение участка, переходы, остановка. Юнит-тесты чистых модулей лежат рядом в test/unit.js (запуск: node test/unit.js или через scripts/build.sh-подобный трюк с Electron).

Публикация

Сейчас расширение живёт в .vsix и ставится командой code --install-extension. Чтобы оно появилось у всех через Extensions в VS Code:

  1. Завести publisher на https://marketplace.visualstudio.com/manage (нужен аккаунт Microsoft и Personal Access Token в Azure DevOps с правом Marketplace → Manage).
  2. В package.json выставить publisher равным id этого publisher'a и добавить repository (ссылку на git-репозиторий), по желанию icon.
  3. npx @vscode/vsce login <publisher> и npx @vscode/vsce publish (нужен Node.js). Через несколько минут расширение доступно всем по id <publisher>.code-retype.
  4. Для VSCodium, Cursor и подобных дополнительно опубликовать на https://open-vsx.org (npx ovsx publish).

После публикации в проектах можно добавить в .vscode/extensions.json рекомендацию "<publisher>.code-retype", и VS Code сам предложит установку всем участникам. Без Marketplace остаётся вариант выкладывать .vsix в GitHub Releases и ставить руками.

Структура

  • src/configFormat.ts — формат конфига, парсинг JSONC, слияние диапазонов (без зависимостей от VS Code)
  • src/compare.ts — сравнение набранных строк с оригиналом
  • src/gitDiff.ts — запуск git diff -U0 и разбор hunk-заголовков
  • src/memfs.ts — in-memory файловая система для редактора набора
  • src/session.ts — сессия: открытие пары редакторов, декорации, блокировка вставки, прогресс
  • src/extension.ts — команды
  • schemas/retype.schema.json — JSON-схема конфига
  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft