Code Pattern Builder by Sevchik
Расширение для Visual Studio Code, которое заменяет короткие команды
готовыми конструкциями языка C++.

Проект написан на TypeScript. Пользователь вводит команду в отдельной
строке C++-файла, а затем нажимает Enter или Tab. Расширение прoверяет
строку и, если команда известна, заменяет ее сгенерированным кодом.
Как начать использовать
Нужно просто скачать раширение.
Поддерживаемые команды
@m — функция main
Ввод:
@m
Результат:
int main(int argc, char** argv) {
return 0;
}
@a имя_массива — цикл по элементам
Ввод:
@a numbers
Результат:
for (auto i : numbers) {
}
@f начало граница направление — обычный цикл for
Ввод:
@f 0 10 +
Результат:
for (int i = 0; i < 10; ++i) {
}
Знак + означает движение вперед. Он создает условие < и шаг ++i.
Знак - означает движение назад. Он создает условие > и шаг --i.
Пример:
@f 10 0 -
Результат:
for (int i = 10; i > 0; --i) {
}
@c — вывод в консоль
Ввод:
@c
Результат:
std::cout << << std::endl;
После раскрытия команды курсор можно поставить между операторами << и
ввести значение для вывода.
Как работает расширение
Основная логика находится в src/extension.ts:
parsePattern() получает текст строки и разбирает его на части.
- Функция проверяет имя команды и количество параметров.
- Если команда правильная, возвращается объект
PatternRequest.
buildPattern() получает этот объект и создает строку с C++-кодом.
expandPatternOrType() заменяет текущую строку готовым кодом.
- Если команда неизвестна, нажатие
Enter или Tab передается обратно VS Code,
поэтому обычное поведение клавиш не ломается.
activate() регистрирует команды расширения при запуске.
Отступ первой строки сохраняется и добавляется к каждой строке результата.
Поэтому паттерн можно написать внутри блока C++ с уже существующим отступом.
Описание файлов проекта
src/extension.ts
Главный файл расширения. Здесь находится весь рабочий код:
- тип
PatternType перечисляет поддерживаемые виды конструкций;
- интерфейс
PatternRequest хранит вид команды и ее параметры;
parsePattern() разбирает введенную команду;
buildPattern() создает C++-шаблон;
expandPatternOrType() заменяет строку или возвращает стандартное действие
клавиши;
activate() подключает команды к VS Code;
deactivate() оставлен пустым, потому что при выключении расширению нечего
дополнительно освобождать.
В этом файле оставлены подробные комментарии, чтобы было проще объяснить
логику на защите.
package.json
Главный файл описания расширения. Это не исходный код, а настройки проекта:
name, displayName, description, version — информация о расширении;
main — путь к скомпилированному файлу, который запускает VS Code;
contributes.commands — команды, которые видны VS Code;
contributes.keybindings — привязка обработки к клавишам Enter и Tab;
scripts — короткие команды npm для компиляции и проверки;
devDependencies — инструменты, нужные только для разработки.
Это стандартный обязательный файл для расширения VS Code.
package-lock.json
Автоматически созданный npm-файл. Он фиксирует точные версии всех зависимостей
и их внутренних зависимостей. Вручную его редактировать не нужно.
Это шаблонный служебный файл, но его рекомендуется хранить в Git, чтобы у
преподавателя установились те же версии пакетов.
tsconfig.json
Настройки компилятора TypeScript:
- исходники берутся из папки
src;
- результат записывается в папку
out;
- используется современный JavaScript;
- включен строгий режим проверки типов;
- создаются карты исходного кода для удобной отладки.
Это стандартный конфигурационный файл TypeScript.
.vscode/launch.json
Настройка запуска проекта через F5. Она открывает отдельное окно
Extension Development Host, в котором загружается текущее расширение.
Файл создан по стандартному шаблону VS Code и немного настроен под этот проект.
.vscode/tasks.json
Описывает задачу сборки для VS Code. Перед запуском расширения выполняется
команда npm run watch, которая следит за изменениями TypeScript и собирает
новый JavaScript.
Это стандартный конфигурационный файл VS Code.
.gitignore
Список файлов, которые не нужно отправлять на GitHub:
node_modules/ — установленные зависимости;
out/ — автоматически скомпилированные файлы;
.vscode-test/, coverage/ — результаты тестирования;
*.vsix — собранные пакеты расширения;
- логи npm и системные файлы.
Эти файлы можно получить заново командами npm, поэтому хранить их в
репозитории не требуется.
Ограничения
- Команда должна находиться на отдельной текущей строке.
- Расширение работает в C++-файлах благодаря условию
editorLangId == cpp.
- При неизвестной команде обычное поведение
Enter и Tab сохраняется.
- Расширение заменяет всю строку, но сохраняет ее начальный отступ.