Skip to content

About

Анализатор кода BSL (1С:Предприятие) с поддержкой LSP. Написан на Rust.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

 
 

Repository files navigation

BSL Analyzer

Экспериментальный Language Server для BSL (1С:Предприятие), написанный на Rust.

Идея проекта

Проект проверяет гипотезу: что получит разработчик 1С, если применить архитектуру rust-analyzer к языку 1С:Предприятие — инкрементальные вычисления на Salsa, full-fidelity CST на Rowan, многослойный HIR с выводом типов, flow-sensitive анализ через CFG и dataflow.

Какие практические эффекты даёт такая архитектура:

  • Инкрементальные пересчёты. Salsa переинвалидирует только зависимую от правки часть графа запросов, без полной переобработки проекта.
  • Семантический hover и completion. Реальный вывод типов (HIR/Ty): Документы.ПКО.<TAB> фильтруется по типу receiver'а; hover показывает фактический тип выражения, включая union'ы из ОписаниеТипов и JSDoc. После Если ТипЗнч(Х) = Тип("Массив") тип внутри ветки сужается (narrowing).
  • Find references и rename по символам. Поиск работает через SemanticSymbol, а не текстовый grep — одноимённые локальные переменные и экспорты модуля не путаются.
  • Flow-sensitive диагностики. Unreachable code, неиспользованные присваивания, потерянные Возврат ищутся через CFG и reaching definitions.
  • Анализ незаконченного кода. Recovery-узлы Rowan позволяют hover и completion работать на полу-набранной строке без flicker'а диагностик.

Подробнее — в docs/architecture/ARCHITECTURE.md и docs/architecture/TYPE_SYSTEM.md.

Возможности

  • Набор диагностик качества кода BSL
  • LSP — поддержка Language Server Protocol для IDE
  • Подсветка структуры комментариев методов: разделы, параметры, поля, типы и ссылки
  • MCP — встроенный сервер Model Context Protocol для AI-агентов
  • SonarQube — отчёты SARIF и JSONL для CI/CD
  • Конфигурация проекта через bsl-analyzer.toml
  • Linux, Windows, macOS (Apple Silicon)

Поддерживаемая версия платформы

Проект разрабатывается и тестируется только на 1С:Предприятие 8.3.27. Факты платформы — типы, методы, глобальный контекст — берутся из справки этой версии (см. crates/bsl-platform/data/PROVENANCE.md).

Более ранние версии и режимы совместимости не проверяются: анализ и рекомендации диагностик исходят из того, что доступен весь API 8.3.27.

Сообщество

Вопросы, идеи, баги — в Telegram-чат: https://t.me/+K7CcQPNZobE3YjUy

Установка

Расширение для редактора (VS Code / Cursor / VSCodium / Zed)

Самый простой способ получить подсветку, навигацию и диагностики прямо в редакторе — поставить расширение bsl-analyzer-lsp:

Для CLI-анализа и MCP-интеграции с AI-агентами поставьте бинарник ниже.

Подсветка комментариев методов работает через semantic tokens: разделы Параметры / Parameters, Возвращаемое значение / Returns, примеры и варианты вызова, имена параметров и вложенных полей, типы и ссылки См. / See. Цвета задаёт тема редактора; в VS Code должна быть включена настройка editor.semanticHighlighting.enabled. Подсветка показывает структуру описания, но сама по себе не подтверждает существование указанного типа или метода.

В подсказке при наведении одиночный тип и его описание располагаются рядом с именем параметра. Несколько вариантов типа и поля возвращаемой структуры показаны вложенными списками; маркеры *, ** и глубже задают уровни полей. Перенесённые строки описаний и типов остаются у своего параметра или поля; примеры выводятся отдельным блоком кода с сохранением отступов и пустых строк.

Linux / macOS

curl -fsSL https://raw.githubusercontent.com/itrous/bsl-analyzer/develop/scripts/install.sh | bash

Или с указанием версии:

curl -fsSL https://raw.githubusercontent.com/itrous/bsl-analyzer/develop/scripts/install.sh | bash -s -- --version 0.1.38

Windows (PowerShell)

irm https://raw.githubusercontent.com/itrous/bsl-analyzer/develop/scripts/install.ps1 | iex

Или с указанием версии:

& ([scriptblock]::Create((irm https://raw.githubusercontent.com/itrous/bsl-analyzer/develop/scripts/install.ps1))) -Version <version>

Инсталлятор кладёт bsl-analyzer.exe в %LOCALAPPDATA%\Programs\bsl-analyzer и добавляет каталог в пользовательский PATH (отключается ключом -NoPathUpdate).

Использование

Запуск из интеграций — прямой вызов бинарника, без shell-обёрток. bsl-analyzer — обычный исполняемый файл, и режимы задаются его подкомандами (lsp, analyze, mcp serve). Не запускайте через CreateProcess шелл-скрипты: install.sh — это установщик, а не точка входа, и на Windows такой вызов даёт os error 193 («не является приложением Win32»). Если обёртка на Windows всё же нужна, она обязана быть .cmd, .bat или .exe.

LSP-сервер

bsl-analyzer lsp

Анализ проекта

# Консольный вывод
bsl-analyzer analyze -s ./my-project

# SARIF-отчёт
bsl-analyzer analyze -s ./my-project -r sarif -o ./reports

# JSONL-вывод
bsl-analyzer analyze -s ./my-project --format=jsonl > report.jsonl

Интеграция с AI через MCP

BSL Analyzer включает встроенный MCP-сервер (Model Context Protocol), который позволяет AI-агентам работать с кодом 1С, справкой платформы, SDBL-запросами и отладкой.

Самый простой способ подключить инструменты к AI-клиентам — выполнить автоустановку:

# Устанавливает global reference и project workspace
bsl-analyzer mcp install \
  --target all \
  --preset recommended \
  --source-dir ./my-project

Подробности:

Куда идти дальше

README.md остаётся короткой продуктовой точкой входа: установка, запуск и основные сценарии. Детальная навигация по документации собрана в docs/README.md.

Быстрые ссылки:

Конфигурация

Основной файл настройки проекта — bsl-analyzer.toml в корне репозитория.

Минимальный пример:

[source]
# Основная конфигурация в самом репозитории:
root = "src/cf"
extensions = ["Расширения/ОсновноеРасширение"]

[diagnostics]
ordinaryAppSupport = false
dataflowMaxIterations = 10000

[diagnostics.parameters]
CommentedCode = false
BadWords = true

[diagnostics.parameters.CyclomaticComplexity]
complexityThreshold = 20

Если основная конфигурация лежит не в репозитории, а в общем на машину хранилище выгрузок, вместо root задаётся зависимость:

[source]
extensions = ["Расширения/ОсновноеРасширение"]

[source.configuration]
id = "UT11"
version = "11.5.22.129"

Путь к хранилищу берётся из ONEC_CONFIGURATIONS_ROOT: сначала из окружения процесса, затем из .env рядом с bsl-analyzer.toml. Относительное значение отсчитывается от корня проекта. Проекту, которому основная конфигурация не нужна, можно не задавать ни root, ни [source.configuration].

Общая структура файла описана в docs/configuration/PROJECT_CONFIGURATION.md, а параметры диагностических правил — в docs/configuration/DIAGNOSTICS.md.

Сборка из исходников

Требования: Rust 1.95+

git clone https://github.com/itrous/bsl-analyzer.git
cd bsl-analyzer
cargo build --release

Если вы планируете менять код проекта, процесс контрибуции и профильная документация для разработчиков собраны в CONTRIBUTING.md и docs/README.md.

Архитектура проекта

bsl-analyzer (LSP/CLI/MCP)
    └── ide
        ├── ide-diagnostics
        ├── ide-assists
        └── ide-db
            └── hir / hir-def / hir-ty
                └── syntax / parser / lexer

Подробнее об архитектуре, Salsa, dataflow и centralized search — в docs/architecture/ARCHITECTURE.md, docs/architecture/DATAFLOW.md и docs/central-postgres-search/README.md.

Благодарности

  • rust-analyzer — архитектурный референс: Salsa, Rowan, слойная организация syntax → hir-def → hir-ty → ide, подход к инкрементальной компиляции и LSP-фичам. Бóльшая часть структуры крейтов в bsl-analyzer следует именно этому образцу.
  • bsl-language-server — статический анализатор BSL (Java, LGPL-3.0); источник формализации диагностических правил и стандартов качества кода 1С.
  • 1c-syntax — сообщество разработчиков инструментов для 1С.
  • RDT1C — «Инструменты разработчика» для 1С; использован как референс для модуля naparnik, а также для модели ранжирования автодополнения (приоритет fuzzy-качества над категорией, контекстный буст по типу) и реестра шаблонов кода.

Лицензия

LGPL-3.0-or-later. См. LICENSE-LGPL, LICENSE-GPL и NOTICE.

Репозиторий содержит материалы, адаптированные по мотивам bsl-language-server (LGPL-3.0), поэтому permissive-модель MIT/Apache-2.0 для всего workspace больше не заявляется. Если позже будет проведён файловый provenance-аудит, отдельные части проекта можно будет лицензировать отдельно.

About

Анализатор кода BSL (1С:Предприятие) с поддержкой LSP. Написан на Rust.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages