Анализ кода 1С через AI: от линтера до графа зависимостей

·
  • анализ кода
  • 1c
  • bsl
  • рефакторинг

Анализ кода 1С через AI: статический линтер BSL, проверка антипаттернов, граф зависимостей и иерархия вызовов методов в Расширенной и Профессиональной редакциях MCP-1C.

MCP-1C добавляет MCP-клиенту инструменты статического анализа кода BSL. AI видит метаданные вашей конфигурации, а инструменты анализа отдают точные факты о коде: диагностики линтера, антипаттерны запросов, связи между модулями. Состав инструментов зависит от редакции: линтер и проверка антипаттернов доступны в Расширенной, граф зависимостей и иерархия вызовов методов добавляются в Профессиональной.

Линтер BSL: первый слой

Инструмент code_analyze относится к Расширенной редакции и умеет три действия. Базовое для повседневной работы это check: проверка кода BSL на типичные ошибки и антипаттерны. Под капотом работает линтер BSL, который покрывает около 30 диагностик. В Открытой редакции этого инструмента нет, он доступен только в Расширенной и Профессиональной.

Действие explain идёт глубже: это полный статический анализ кода BSL шестью анализаторами: сложность, ошибки, стиль, производительность, безопасность, совместимость.

Третье действие, compatibility, отвечает на отдельный вопрос: переживёт ли код переход на другую версию платформы. Оно строит матрицу совместимости и подсвечивает breaking changes между версиями 1С.

code_analyze action=check    -> диагностики линтера BSL
code_analyze action=explain  -> разбор шестью анализаторами
code_analyze action=compatibility -> матрица совместимости и breaking changes

Оптимизатор запросов

Для запросов есть отдельный инструмент. Оптимизатор запросов в Расширенной редакции (code_generate, действие optimize_query) выполняет статический анализ запроса на 15 антипаттернов производительности.

Граф зависимостей и иерархия вызовов

Линтер смотрит на код в пределах одного модуля. Чтобы увидеть связи по всей конфигурации, в Профессиональной редакции к code_analyze добавляются действия dependency_graph, call_hierarchy, arch_boundary, find_modules и graph_query. Это навигация по структуре проекта: связи между объектами метаданных и иерархия вызовов методов, а не проверка отдельного файла.

Два центральных инструмента работают на разных уровнях, и это важно не путать:

  • dependency_graph визуализирует связи между объектами метаданных конфигурации;
  • call_hierarchy строит иерархию вызовов на уровне методов (кто вызывает метод и кого вызывает он).

Граф зависимостей между объектами

dependency_graph принимает обязательный параметр object и набор уточнений:

Параметр Значения
object обязательный, объект метаданных
direction reverse / forward / both
depth 1-3
format text / json / mermaid
edge_types movement / query / call / subscription и др.
min_risk low / medium / high
path_glob фильтр по путям

Формат mermaid удобен тем, что граф можно сразу вставить в документацию или в чат и увидеть картинку, а не текст.

Иерархия вызовов методов

call_hierarchy отвечает на вопрос «что сломается, если я трону этот метод». Обязательный параметр это method в форме Объект.Метод или Тип.Объект.Метод, например ОбщийМодуль.Расчёты.Пересчитать. Дальше задаются direction (reverse / forward / both), depth (по умолчанию 2) и format (text / json).

Здесь важна честная граница: результат неполный по дизайну. Учитываются только квалифицированные вызовы вида Модуль.Метод(). Вызовы без префикса модуля и динамические вызовы через Выполнить или ЗапуститьМетод в иерархию не попадают. Это особенность статического разбора, и о ней лучше знать заранее, чтобы не принимать пустую ветку за отсутствие вызовов.

Как запустить графовые инструменты

Графовые действия dependency_graph и call_hierarchy требуют предварительно построенного графа зависимостей, поэтому работа идёт в два шага. Сначала разовая сборка кэша: запуск с флагом --build-depgraph строит граф по выгрузке конфигурации (--dump). Затем постоянный MCP-сервер запускается с флагом --enable-depgraph (вместе с --dump), который включает отдачу графовых инструментов при работе сервера. В целом большинство возможностей Профессиональной редакции опираются на предварительное построение кэша или разовую генерацию, поэтому первая сборка занимает дольше обычного.

# Шаг 1: разовая сборка кэша графа
mcp-1c-pro --dump "/Users/me/bases/acc-dump" --build-depgraph

# Шаг 2: постоянный MCP-сервер с отдачей графовых инструментов
mcp-1c-pro \
  --dump "/Users/me/bases/acc-dump" \
  --enable-depgraph

Транспорт по умолчанию это stdio: MCP-клиент сам запускает бинарник mcp-1c-pro и общается с ним через stdin и stdout, без отдельных портов. Для анализа по выгрузке достаточно флага --dump с путём к выгрузке конфигурации, отдельная база не нужна. Если требуется живая база, флаг --base повторяется для каждой базы в формате NAME=URL, где URL это HTTP-адрес опубликованного HTTP-сервиса mcp-1c в 1С (например http://localhost:8080/hs/mcp-1c); схема poll:// объявляет polling-базу. Если инструмент внутри обращается к LLM, ключи (например YANDEXGPT_API_KEY) задаются в секции env.

Claude Desktop поддерживает протокол MCP из коробки. Клиент сам запускает сервер (шаг 2), поэтому в mcpServers указывается --enable-depgraph, а кэш графа должен быть собран заранее (шаг 1). Сервер прописывается с ключами command, args и env:

{
  "mcpServers": {
    "mcp-1c": {
      "command": "/usr/local/bin/mcp-1c-pro",
      "args": [
        "--dump", "/Users/me/bases/acc-dump",
        "--enable-depgraph"
      ]
    }
  }
}

Путь к конфигу зависит от ОС: на macOS это ~/Library/Application Support/Claude/claude_desktop_config.json, на Windows %APPDATA%\Claude\claude_desktop_config.json. Claude Desktop официально поставляется только для macOS и Windows. Подробности подключения собраны в разделе документации.

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

Анализ часто упирается в вопрос «а как правильно вызвать эту функцию». Открытый инструмент bsl_syntax_help даёт справку по 180 встроенным функциям и методам языка 1С (BSL) и работает в любой редакции. В платных редакциях подключается полная справка по синтаксису платформы: около 10000 определений из .hbk-файлов.

Что в какой редакции

Возможность Редакция
bsl_syntax_help (180 функций) Открытая
code_analyze: check, explain, compatibility Расширенная
Линтер BSL (около 30 диагностик) Расширенная
Оптимизатор запросов (15 антипаттернов) Расширенная
dependency_graph, call_hierarchy, arch_boundary, find_modules, graph_query Профессиональная
Полная справка платформы (около 10000 определений) платные редакции

Поддерживаются версии платформы 1С 8.3.x и 8.5.x, коммерческие и учебные. Корпоративная редакция (для нескольких пользователей на общем сервере) сейчас в разработке. Сравнение редакций и цены собраны на странице тарифов, а общий обзор продукта на главной.