Рабочие инструменты

Запуск и отладка

Gitcito читает ваш .vscode/launch.json — корневой и любые вложенные, сгруппированные разделителями, — и запускает выбранную конфигурацию во встроенном терминале.

Выбор конфигурации запуска и плавающая панель

  • Переменные VS Code раскрываются (${workspaceFolder} и компания).
  • preLaunchTask конфигурации выполняется первым.
  • Значения ${input:…} спрашиваются интерактивно перед запуском (promptString и pickString). pickString показывает варианты как настоящий выбор со значением по умолчанию; promptString с пометкой password маскируется.
  • Задачи с isBackground (вотчеры, dev-серверы) запускаются отдельно, так что никогда не блокируют старт.
  • Compounds запускают каждого участника как собственную параллельную сессию — в одном разделённом терминале с именем compound, по панели на участника, ровно как debug-сессии VS Code. С stopAll: true остановка одного участника останавливает всех. Задачи, общие для нескольких участников, выполняются один раз, в своей панели, до запуска участников — запрос повышения версии спрашивает один раз, а не по разу на участника. Эта панель закрывается сама при успехе и остаётся открытой при ошибке.
  • serverReadyAction учитывается: когда вывод сессии совпадает с заданным шаблоном, объявленный URL открывается в браузере (openExternally; debugWithChrome / debugWithEdge тоже открывают браузер — Gitcito не может подключить к нему отладчик).

Compound, запустивший две параллельные сессии

Выбор ${input} со значением по умолчанию

Плавающая панель даёт паузу / продолжение, перезапуск, остановку и переключает между запущенными сессиями.

Включается в Настройки → Общие → Включить launch.json. Кнопка LAUNCH появляется рядом с вкладками Git / Файлы.

Участник compound отображается как compound › участник, а его перезапуск перезапускает только этого участника. Если панель закрывает что-то нужное, перетащите её в сторону за ручку — позиция запоминается, а двойной щелчок по ручке возвращает её в центр.

Чего Gitcito сознательно не делает: он запускает ваши программы в настоящих терминалах, но он не отладчик — без точек останова, без просмотра переменных, без Debug Adapter Protocol. Конфигурации только-attach работают, когда несут preLaunchTask (задача и есть работа); чистый attach запускать нечего.

Горячие действия — быстрый путь рядом с «Перезапустить»

Горячая перезагрузка, отправленная с панели отладки

Большинство сред разработки давно перезагружаются по одной клавише: flutter run — по r, Metro — по r, nodemon — по rs ⏎, Vitest перезапускает набор тестов по a. Перезапускать ради этого всю конфигурацию запуска — медленный путь: он убивает процесс, снова выполняет каждый preLaunchTask и выбрасывает состояние приложения.

Поэтому Gitcito читает команду, которую конфигурация запускает на самом деле — следуя за npm run dev вплоть до скриптов вашего package.json — и выносит клавиши этой среды на панель отладки. Нажатие записывает клавишу в стандартный ввод сессии, ровно так, как если бы вы набрали её в терминале сами.

Среда Кнопки За ⋯
Flutter (flutter run) Горячая перезагрузка r, горячий перезапуск R debug paint, оверлей производительности, смена платформы, DevTools
Expo Перезагрузить r меню разработчика, отладчик
Metro / React Native Перезагрузить r меню разработчика, отладчик
Vite (dev, serve, preview) Перезапустить сервер r ⏎ открыть в браузере, показать адреса, очистить консоль
nodemon Перезапустить rs ⏎ —
Vitest (режим watch) Все тесты a, упавшие f обновить снимки
Jest (--watch) Все тесты a, упавшие f только изменённые файлы, обновить снимки
Mocha (--watch) Перезапустить rs ⏎ —
AVA (--watch) Все тесты r ⏎, обновить снимки u ⏎ —
dotnet watch Принудительный перезапуск Ctrl+R —
Wrangler (wrangler dev) Открыть в браузере b DevTools, локально/удалённо, очистить консоль

Среды, которые перезагружаются сами, кнопок не получают — node --watch, ng serve, tsc --watch, cargo watch, next dev, webpack-dev-server. Кнопка, отправляющая клавишу, которую никто не читает, хуже отсутствия кнопки: она выглядит так, будто сработала.

Ограничения. Определение текстовое: оно ищет имя программы в командной строке, поэтому конфигурация, запускающая ваш сервер через скрипт-обёртку, который Gitcito прочитать не может, не получит ничего. Подтверждения нажатия тоже нет — кнопка мигает, а настоящий ответ даёт вывод самого процесса. Приостановленная или завершённая сессия ввод не принимает, и кнопки становятся неактивными.

Если догадка неверна, скажите об этом в самой конфигурации:

{
  "name": "API (watch)",
  "type": "node-terminal",
  "command": "./scripts/dev.sh",
  "gitcito": { "hotActions": [{ "label": "Reload", "send": "r", "icon": "reload" }] }
}

send пишется буквально — завершите его \n для CLI, ожидающего Enter. icon необязателен: reload, restart, rerun, failed, snapshot, menu, debugger, browser, clear, paint, perf, platform, devtools, urls. Пустой массив hotActions отключает кнопки для этой конфигурации.

Цель запуска — на каком устройстве стартует конфигурация

Выбор цели рядом с вкладкой LAUNCH

Конфигурации, которая собирает мобильное приложение, нужно сказать, где его запускать. Этот выбор принадлежит не только Flutter — React Native, Expo, Capacitor и xcodebuild тоже принимают цель, и каждый пишет её по-своему. Поэтому Gitcito спрашивает один раз, рядом с вкладкой LAUNCH, и записывает ответ в той форме, которую читает среда этой конфигурации. Выбор появляется, только если какая-то конфигурация репозитория действительно принимает устройство.

Откуда берётся список — из тех инструментов SDK, что есть на машине; их опрашивают параллельно:

Инструмент Даёт Когда опрашивается
flutter devices / flutter emulators всё, уже нормализованное если в папке есть pubspec.yaml
xcrun simctl симуляторы iOS, запущенные и холодные на macOS
adb devices телефоны Android и запущенные эмуляторы всегда
emulator -list-avds ещё холодные эмуляторы Android всегда

Один и тот же симулятор сообщают до трёх из них, поэтому записи объединяются по платформе и имени; при равенстве побеждает Flutter, ведь именно его id ждёт flutter run -d. Неустановленные инструменты названы внизу меню — короткий список должен объяснять себя сам.

Что делает выбор:

Семейство Записывается как
Flutter -d <id>
React Native iOS --udid <id>
React Native Android --deviceId=<id>
Expo run:ios / run:android --device <id>
Capacitor / Ionic --target <id>
xcodebuild -destination id=<id>
всё остальное только окружение

Каждая запущенная конфигурация получает ещё GITCITO_DEVICE_ID, GITCITO_DEVICE_NAME и GITCITO_DEVICE_PLATFORM в окружении, а для настоящего Android-устройства — и ANDROID_SERIAL. Именно это позволяет скрипту-обёртке, задаче Gradle или голому adb попасть в тот же телефон, а Gitcito при этом ничего не переписывает.

Запуск холодного устройства. Всё, что под заголовком Не запущено, стартует при выборе: flutter emulators --launch, xcrun simctl boot (плюс окно Simulator) или отсоединённый emulator -avd — так выход из Gitcito не уносит с собой ваш эмулятор Android.

Ограничения. Конфигурацию, которая уже называет устройство — явный -d, --simulator, deviceId из Dart-Code, — не трогают: выбор никогда не перекрывает написанное автором. Id, которому понадобились бы кавычки, уходит в окружение, вместо того чтобы рисковать сломанной командной строкой. Меню отфильтровано по тому, до чего дотягиваются ваши конфигурации, так что репозиторий только под Android никогда не предложит вам iPhone. И список — это снимок: подключите телефон и нажмите Обновить устройства.

Выбор запоминается для каждого репозитория и забывается, когда устройство исчезает.

См. также: Встроенный терминал

Значения из JSON и YAML

Поле может показывать текущую версию или получать начальное значение из файла проекта. Gitcito читает файл при запуске, перед показом полей. Расширение VS Code не требуется.

Добавьте fileValues в поле promptString или pickString. Каждое значение задаёт путь относительно папки конфигурации запуска и свойство, разделённое точками. Используйте ${fileValue:name} в description или default. Пустой default оставляет поле необязательным.

{
  "id": "version",
  "type": "promptString",
  "description": "Current: ${fileValue:version} (${fileValue:build})",
  "default": "",
  "fileValues": {
    "version": { "file": "version.yaml", "key": "settings.base.MARKETING_VERSION" },
    "build": { "file": "version.yaml", "key": "settings.base.CURRENT_PROJECT_VERSION" }
  }
}

Поддерживаются файлы JSON, YAML и YML внутри папки размером до 1 МиБ и значения строкового, числового или логического типа. Отсутствующие файлы, неверные данные, отсутствующие свойства и внешние пути останавливают запуск с ошибкой. Команды и выражения JavaScript не выполняются. Новый запуск перечитывает файлы; Restart использует прежние ответы. VS Code не обрабатывает эти поля Gitcito самостоятельно.

Улучшить этот перевод на GitHub