Перейти к содержимому

Анализ кода

bee code analyze проверяет исходники без MongoDB и bee init. Выберите движок C#, TypeScript, Vue, Dart, Swift/iOS или Kotlin/Android с поддерживаемым контекстом, описанным ниже. Движок по умолчанию сохраняет шесть правил C# для именования и сопровождаемости. Компиляторы и зависимости нужно установить заранее; анализ не загружает их.

Запустите в каталоге репозитория:

Окно терминала
bee code analyze --engine roslyn --json

Сначала установите .NET SDK и пакеты эталонных сборок для целевой платформы проекта. Bee не загружает их; отсутствие ссылок отмечается как неполный анализ.

Движок возвращает настоящие сообщения компилятора C#, например CS0029 при присваивании строки целому числу. Находки сохраняют исходный идентификатор правила и позицию в коде. Отчёт версии 2 также содержит движок, профиль анализа, снимок исходников и состояние завершения. Охват анализа и покрытие тестами разделены; команда не запускает тесты и не измеряет их покрытие.

Bee читает входные файлы проекта и анализирует их в собственном процессе. Он не запускает цели MSBuild, восстановление пакетов, генераторы или плагины анализаторов репозитория. Отсутствующие зависимости и неточно восстановленный контекст проекта дают неполный результат. Чистый результат относится к указанному охвату и не доказывает сборку всех целевых платформ.

Первый этап поддерживает стандартный контекст Debug. Явные настройки DefineConstants, DisableImplicitConfigurationDefines или DisableImplicitFrameworkDefines дают неполный анализ.

Снимок привязан к содержимому исходников, а не только к имени ветки или времени изменения файла. Git, если доступен, указывает происхождение; незакоммиченные изменения тоже входят в идентификатор содержимого. Одинаковые фактические входы, движок и профиль дают одинаковую нормализованную идентичность анализа. snapshot.dirty остаётся null (неизвестно); сравнивайте исходные данные по идентификатору содержимого.

Команда по умолчанию и bee lint --native сохраняют отчёт версии 1 и коды выхода. Явно выбранные движки компилятора используют версию 2. Импорт покрытия, дублирование и проверки нового кода остаются следующими этапами.

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

Окно терминала
bee code analyze --engine typescript --project tsconfig.json --runtime /tools/node --toolchain /tools/node_modules --json
bee code analyze --engine vue --project tsconfig.json --runtime /tools/node --toolchain /tools/node_modules --json
bee code analyze --engine dart --project pubspec.yaml --toolchain /tools/dart-sdk --json
Движок Контекст и результат
typescript TypeScript Compiler API, выбранный tsconfig, исходники и сохранённые декларации; исходные сообщения TSxxxx
vue Vue language tools проверяет script и template; находки отображаются на исходный файл .vue
dart Анализатор Dart SDK, объявленные пакеты и поддерживаемые настройки; исходные коды правил

Каталог инструментов Node содержит TypeScript, а для Vue также vue-tsc со своими зависимостями. Используйте доверенную установку. Зависимости проекта должны уже существовать. Импорты Dart разрешаются через существующий .dart_tool/package_config.json. Поддерживаемые настройки могут подключать сохранённые относительные файлы или правила package:lints. Этот движок Dart не поддерживает проекты Flutter.

Каждый движок анализирует копию исходников и зависимостей в закрытом временном каталоге. Отчёт содержит фактическую идентичность компилятора/SDK, позиции, отпечатки и состояние завершения. Выбор путей ограничивает находки, сохраняя необходимый контекст компиляции. Движки вне .NET считают проанализированные контексты; метрика compiled-projects к ним неприменима.

Неподдерживаемые плагины, исполняемые hook-и, отсутствующие зависимости и неотображаемые сообщения дают неполный результат. Препроцессоры Vue, внешние SFC-скрипты и пользовательские блоки пока не поддерживаются. Внешние движки выдают JSON версии 2 или текст; SARIF и встроенные наборы правил для них недоступны. Для больших снимков инструментов увеличьте --timeout-seconds. После тайм-аута или отмены у каждого движка есть отдельное время на очистку: 500 мс по умолчанию, 3 секунды для адаптеров, управляющих внешними процессами компилятора. Если очистка не завершена за это время, неполный отчёт содержит причину cleanup-timeout.

Выпуск принимает TypeScript 6.0.3, Vue language-core 3.3.6 с Volar TypeScript 2.4.28 (из проверенной установки vue-tsc 3.3.6) и Dart SDK 3.11.4. Другие версии компилятора дают неполный анализ. Проверка пакетов использует Node 26.4.0. Если версии зависимостей приложения отличаются, держите инструменты анализа в отдельном каталоге.

Анализ мобильного кода использует явный контекст компиляции в JSON. Укажите все исходные файлы и зависимости SDK выбранного модуля. Пути исходников задаются относительно каталога запуска, пути инструментов и SDK — абсолютно. Неизвестные поля и неподдерживаемые настройки отклоняются. Bee не вычисляет проект Xcode, манифест пакета Swift или сборку Gradle.

Сохраните контекст Swift как bee-ios.json, замените путь SDK и выберите поддерживаемую им цель. Движку нужен macOS с Xcode.

{
"schemaVersion": 1,
"language": "swift",
"platform": "ios",
"moduleName": "MobileApp",
"sources": ["Types.swift", "Main.swift"],
"sdkRoot": "/absolute/iPhoneOS.sdk",
"targetTriple": "arm64-apple-ios18.0",
"defines": ["DEBUG"],
"dependencies": []
}
Окно терминала
bee code analyze --engine swift --project bee-ios.json --toolchain /absolute/XcodeDefault.xctoolchain --timeout-seconds 600 --json

Копирование большого iOS SDK и проверка типов исходников с UIKit могут занять несколько минут, особенно на Intel Mac. В этом примере отведено десять минут; тайм-аут по умолчанию остаётся равным 60 секундам.

Поле Swift dependencies содержит дополнительные обычные файлы .swift того же модуля, а не готовые пользовательские модули или манифесты пакетов. Движок копирует выбранный iOS SDK и необходимые ресурсы компилятора, затем проверяет типы объявленных исходников. Находки используют правило swift.compiler, фактическую версию компилятора и физические позиции. Контексты симулятора и приложений macOS пока не входят в этот iOS-этап. Пользовательские макросы, неподдерживаемые атрибуты, #sourceLocation, смешанный Objective-C и bridging headers не поддерживаются.

Сохраните контекст Kotlin как bee-android.json, указав реальный jar Android SDK и пути установленного компилятора/Java:

{
"schemaVersion": 1,
"language": "kotlin",
"platform": "android",
"moduleName": "MobileApp",
"sources": ["Types.kt", "Main.kt"],
"androidJar": "/absolute/android-sdk/platforms/android-36/android.jar",
"classpath": [],
"jvmTarget": "17"
}
Окно терминала
bee code analyze --engine kotlin --project bee-android.json --toolchain /absolute/kotlinc --runtime /absolute/jdk/bin/java --timeout-seconds 180 --json

classpath содержит существующие JAR проекта, читаемые как метаданные компиляции. Java запускает доверенный компилятор Kotlin; типы Android API берутся из android.jar. Классы настольного JDK не становятся Android API. Диагностика использует kotlin.compiler и структурированные позиции компилятора. Kotlin scripting, KAPT/KSP, Compose/плагины компилятора, смешанный Java и Kotlin Multiplatform не поддерживаются. Необходимые сгенерированные типы должны уже существовать как явно объявленные поддерживаемые исходники или зависимости.

Оба контекста описывают заданный вами охват. Завершённый анализ не проверяет упаковку, подпись, ресурсы приложения, minSdk/desugaring, эмуляторы, устройства или поведение во время выполнения. Отсутствующий SDK/зависимость и неподдерживаемый контекст возвращают 5. Swift iOS на Linux или Windows также возвращает 5. Создание большого снимка SDK может занять больше времени, чем обычная проверка исходников.

Swift требует компилятор 6.x с соответствующей библиотекой диагностики; локальная проверка использовала Swift 6.4. Raw strings, raw regex literals, атрибуты и директивы вне проверенного списка пока не поддерживаются. Kotlin требует 2.1.21, Java 17 JDK и jvmTarget 17. Проверки используют Android API 36; выберите SDK для объявленного контекста.

Окно терминала
bee code analyze src --scope source --json
bee code analyze --format sarif
bee lint src --native --scope source --json

bee lint --native запускает четыре правила именования. bee code analyze добавляет длину и сложность методов. Режим запуска линтера проекта сохраняется.

Правило Проверка
BEE1001 Приватные поля: _camelCase
BEE1002 Приватные константы: PascalCase
BEE1003 Суффикс Async у асинхронных методов, с исключениями override/interface
BEE1004 Имя обычного public-класса верхнего уровня соответствует имени файла
BEE2001 По умолчанию не более 200 физических строк тела метода
BEE2002 По умолчанию цикломатическая сложность не выше 10

BEE1004 не охватывает вложенные, partial- и file-local классы, неявный Program и сгруппированные record/interface/enum. Длина включает вложенный исходный код внутри тела. Сложность локальных функций с блочным телом считается отдельно. Expression-bodied методы/локальные функции и lambda/anonymous тела отдельно не измеряются; этот охват метрик отмечается как неполный. Комментарии и строки не являются ветвями.

По умолчанию compiled восстанавливает выбранные C# файлы и символы препроцессора из файлов проекта без запуска MSBuild, build targets и генераторов. Используются существующий загрузчик графа, один выбранный target framework и Roslyn Preview. Неразрешённый контекст и ограничения видны в отчёте; сборка всех target framework не подразумевается. --scope source явно сканирует исходные C# файлы. Оба режима не исполняют код репозитория.

Встроенные отчёты JSON и SARIF 2.1.0 содержат правила, позиции, отпечатки находок, охват и причины неполного анализа. Добавление строк перед неизменным символом сохраняет отпечаток; изменение идентичности символа может его изменить. Неподдерживаемый язык, отсутствующий файл и ошибка чтения/разбора не считаются чистым результатом. Встроенные правила BEE охватывают C#. Для диагностики компилятора используйте явные языковые движки, описанные выше.

Код выхода Значение
0 Правила выполнены, исходники проверены, находок нет
1 Есть находки
4 Некорректная команда или набор правил
5 Анализ не выполнен или завершён частично

Частичный анализ даже с находками возвращает 5.

Окно терминала
bee lint --catalog --json
bee lint --validate-ruleset ruleset.json --json
bee lint --self-test --ruleset ruleset.json --json
bee code analyze --ruleset ruleset.json --format sarif
{
"version": 1,
"rules": [
{ "id": "BEE1001", "severity": "error" },
{ "id": "BEE2001", "options": { "max-lines": 120 } }
],
"scope": "source"
}

Неизвестные правила, повторяющиеся поля, ошибки в названиях параметров, неподдерживаемые версии и пустой выбор правил отклоняются. Self-test запускает реальные выбранные правила на положительных и отрицательных примерах. Инструкции на естественном языке из bee hook rule не превращаются автоматически в исполняемые анализаторы. См. bee lint.

Явно сохраните результат анализа компилятором, затем прочитайте краткую сводку без повторного запуска компилятора:

Окно терминала
bee code analyze --engine roslyn --save-run --json
bee code runs list --json --limit 10 --budget 4096
bee code runs show <run-id> --json --limit 20 --budget 8192

--save-run поддерживает движки roslyn, typescript, vue, dart, swift и kotlin. Native/schema-1 и формат SARIF не поддерживаются. Без этого флага прежний вывод и поведение сохранения не меняются.

--save-run --json возвращает один конверт analysis-save с анализом и результатом сохранения. Успешное сохранение оставляет код анализа: 0 для чистого результата, 1 для находок, 5 для неполного анализа. Существующий run ID возвращает 8 без перезаписи записи. Другие ошибки сохранения возвращают 5, сохраняя исходный результат анализа отдельно. Недопустимые запросы не сохраняются. Для слишком большого отчёта возвращается явная сводка о пропуске вместо успешного сохранения.

Каждый запуск имеет отдельную неизменяемую локальную запись. list проверяет метаданные и сообщает integrity: report-not-checked. show также проверяет байты, хеши и соответствие идентификаторов, после чего сообщает integrity: verified. Чтение целого отчёта с находками или неполным анализом возвращает 0; analysisStatus и analysisExitCode сохраняют исходный результат. Отсутствующий запуск возвращает 3, неверные аргументы 4, нечитаемая или повреждённая запись 5.

По умолчанию обе команды чтения показывают до 20 результатов с бюджетом 16 000 символов. --limit принимает 0–200, --budget — 2048–65 536 символов UTF-16 вместе с завершающим переводом строки. Неуместившиеся записи исключаются целиком с явным указанием количества. Частичное сканирование не выдаётся за полный список последних результатов.

История привязана к рабочему каталогу анализа. Для другого каталога используйте --root DIR; отдельные checkout не объединяются автоматически. Файлы находятся в локальном каталоге Bee analysis/runs/v1. Сохранение явно запрашивается и не удаляет старые записи автоматически; ограничение одного отчёта не является общей дисковой квотой.

Отчёты сохраняют доступные идентификаторы исходников и инструментов. При раннем сбое хеш исходников или профиля может отсутствовать; один analysis key не доказывает одинаковые исходные данные. История не подтверждает совместимость настроек, сравнение с базовой версией, покрытие тестами или прохождение контроля качества. Повторное чтение отчёта позволяет не запускать анализ снова, но не показывает, изменился ли текущий код.