🧪 ITMO C++ Lab Kit
Расширение VS Code для лаб по C++: стиль Google, clang-tidy как в CI курса,
сложность функций с объяснением прямо в коде, тесты GoogleTest в панели
«Тестирование», git-хуки, условие лабы с чек-листом и учёт времени.
Работает с готовыми репозиториями лаб — и на Makefile, и на CMake.
✨ Highlights
- 🎯 clang-tidy как в CI. Конфиг
tidy-config берётся прямо из
.github/workflows/*.yml — локальные замечания совпадают с теми, за которые
CI снимает баллы.
- 🧮 Сложность функций в коде. Над каждой функцией — цикломатическая и
когнитивная сложность; по клику видно, какой
if или && сколько добавил.
- ✅ Тесты в один клик. Все
TEST, TEST_F, TEST_P — в панели
«Тестирование», упавшая проверка подсвечивается на строке EXPECT_….
- 🏗️ CMake и Makefile. Сборка, запуск, тесты и проверка перед сдачей
работают в обоих случаях без настройки.
- 🪝 Git-хуки. Формат и clang-tidy перед коммитом, тесты перед push.
- 📋 Условие лабы рядом с кодом.
README.md или TASK.md в боковой
панели, пункты превращаются в чек-лист с прогрессом.
- ⏱️ Учёт времени и дедлайн в строке состояния.
- 🌍 macOS и WSL, интерфейс на русском и английском.
🚀 Быстрый старт
- Поставьте инструменты:
- 🍎 macOS:
brew install llvm googletest pkg-config
- 🐧 WSL / Ubuntu:
sudo apt install clang clang-tidy clang-format clangd make cmake libgtest-dev pkg-config git
- Установите расширение:
code --install-extension itmo-cpp-labkit-<версия>.vsix.
- Откройте папку с лабой и нажмите 🧪 Lab Kit в строке состояния →
Проверить инструменты, затем Настроить окружение.
- Готово: кнопки ▶ 🧪 ☑ — в заголовке открытого
.cpp.
💡 Хотите интерфейс на русском при английском VS Code? Поставьте
labkit.language → ru.
🧭 Где что находится
| Где |
Что |
| 🧪 Lab Kit в строке состояния |
меню всех действий |
| ▶ 🧪 ☑ в заголовке редактора |
запуск (⌘⌥R), тесты (⌘⌥T), проверка перед сдачей |
| ⏱️ таймер в строке состояния |
время на лабу и дни до дедлайна, клик — отчёт |
| ⚗️ иконка Lab Kit в боковой панели |
условие лабы с чек-листом |
| 🧫 панель «Тестирование» |
отдельные тесты, запуск по одному |
| ⚠️ вкладка «Проблемы» |
ошибки компилятора, clang-tidy и превышения сложности |
📦 Возможности
⚙️ Настройка окружения
Lab Kit: Настроить окружение пишет в корень лабы:
.clang-format — Google style, C++20, 80 колонок;
.clang-tidy — по профилю labkit.clangTidy.profile:
| Профиль |
Что внутри |
auto (по умолчанию) |
конфиг CI, если он есть, иначе basic |
ci |
ровно tidy-config из .github/workflows |
basic |
bugprone, google, modernize, performance, readability, misc + имена по Google |
strict |
basic + cert, cppcoreguidelines, portability; предупреждения — ошибки |
custom |
файл преподавателя из labkit.clangTidy.customConfig |
tests/.clang-tidy — послабления под макросы GoogleTest;
настройки VS Code: формат при сохранении, линейка на 80, clangd с
clang-tidy той же версии LLVM, без двойных подсказок от cpptools.
🏗️ Сборка, запуск и проверка
Lab Kit сам понимает, как устроена лаба:
| Лаба |
Сборка |
Запуск |
Тесты |
| 🧱 CMake |
cmake -S . -B build, cmake --build build |
цель из CMake File API (если их несколько — выбор) |
ctest параллельно |
| 🛠️ Makefile Lab Kit |
make |
make run |
make test |
☑ Проверка перед сдачей: clang-format (если в репозитории есть
.clang-format) → сборка → clang-tidy с конфигом из CI → тесты. Тесты
преподавателя (tests/, *_test(s).cpp) форматом и clang-tidy не
проверяются — только ваш код, как в CI курса.
Для лаб без системы сборки есть Lab Kit: Сгенерировать Makefile —
make, run, test, fmt, fmt-check, tidy, check, flags, сборка
с -Wall -Wextra -Wconversion, ASan и UBSan (выключить: make SAN=).
🧮 Сложность функций
- 📊 CodeLens над функцией: сложность, когнитивная сложность, строки,
параметры, вложенность.
- 🖱️ Клик по CodeLens подсвечивает в коде всё, что добавляет сложность
(
if +1, for +3 (влож. 2)), и пишет итог у заголовка: «1 + 7 ветвлений
= 8 · когн. 10».
- 🔎 Наведение на имя функции — карточка «метрика / значение / порог».
- ⚠️ Превышение порогов
labkit.complexity.max* попадает в «Проблемы».
- 📑 Отчёт о сложности — таблица по лабе без тестов, клик по файлу
открывает функцию.
Анализатор работает без компилятора: мгновенно и даже на несобирающемся
коде.
🧫 Тесты
- Все
TEST, TEST_F, TEST_P, TYPED_TEST — в панели «Тестирование»:
лаба → файл → тест.
- Запуск по одному, по файлу или всех; упавшая проверка — прямо на строке.
- В CMake-лабах тестовые программы берутся из
ctest (нужен
gtest_discover_tests), экземпляры TEST_P собираются в один пункт.
- Падение санитайзера или segfault показывается как ошибка с выводом.
🪝 Git-хуки
Lab Kit: Установить git-хуки:
- pre-commit — clang-format по тому, что попадёт в коммит, и clang-tidy
по изменённым файлам вне тестов;
- pre-push — сборка и тесты (
ctest или make test).
Прежний хук не затирается: он переезжает в pre-commit.local и
запускается первым. Пропустить один раз: git commit --no-verify.
📋 Условие лабы
Иконка Lab Kit в боковой панели показывает TASK.md, ЗАДАНИЕ.md или
README.md из корня лабы. Пункты списков становятся чек-листом с
прогрессом «Выполнено 3 из 7», отметки хранятся в .labkit/task.json и не
меняют файл условия. Если файл не нашёлся, панель покажет, где искала, и
предложит выбрать файл вручную.
⏱️ Время и дедлайн
Время идёт, пока вы работаете в VS Code, и замирает через
labkit.time.idleMinutes минут простоя. Дедлайн задаётся файлом
.labkit.json в корне лабы:
{"name": "lab3", "deadline": "2026-11-01"}
Данные лежат в .labkit/, а сама папка добавляется в локальный
.git/info/exclude — в коммиты не попадает.
🩺 Doctor
Lab Kit: Проверить инструменты проверяет clang-format, clang-tidy,
clangd, clang++, make, cmake, git, GoogleTest и расширение clangd,
сравнивает версию clang-tidy с tidy-version из CI и подсказывает команду
установки под вашу систему.
🌍 Платформы и язык
- 🍎 macOS — Homebrew LLVM находится автоматически.
- 🪟 Windows — через WSL: «Reopen Folder in WSL», расширение работает на
стороне WSL. Версионные бинарники (
clang-tidy-18, /usr/lib/llvm-18)
находятся сами, без clang++ Makefile соберёт через g++.
- 🐧 Linux — так же, как WSL.
- 🗣️ Язык: как у VS Code или
labkit.language = ru / en. Названия
команд и настроек VS Code показывает на языке редактора.
🔧 Настройки
| Настройка |
По умолчанию |
Что делает |
labkit.language |
auto |
язык интерфейса, Makefile и хуков |
labkit.clangTidy.profile |
auto |
набор проверок clang-tidy |
labkit.llvmBinDir |
— |
папка с clang-tidy, clang-format, clangd |
labkit.complexity.max* |
10 / 15 / 40 / 5 / 4 |
пороги сложности, когн. сложности, строк, параметров, вложенности |
labkit.cmake.buildDir |
build |
папка сборки CMake |
labkit.cmake.configureArgs |
— |
аргументы cmake -S . -B build |
labkit.gitHooks.preCommit |
format, tidy |
проверки перед коммитом |
labkit.gitHooks.prePush |
test |
проверки перед push |
labkit.task.files |
TASK.md, …, README.md |
где искать условие |
labkit.time.idleMinutes |
5 |
когда перестать считать время |
👩💻 Разработка
bun install
bun run check # 🧹 Biome: линтер и форматирование
bun run fix # ✍️ Biome: исправить и отформатировать
bun run typecheck # 🔍 TypeScript
bun run test # 🧪 юнит-тесты + полнота переводов
bun run test:vscode -- /путь/к/лабам # 🖥️ smoke в настоящем VS Code
bun run package # 📦 itmo-cpp-labkit-<версия>.vsix
CI на GitHub Actions прогоняет Biome, проверку типов, тесты и сборку
.vsix на каждый push и pull request.
| |