Описание
Сейчас graphify поддерживает 36 языков через tree-sitter грамматики, но среди них нет BSL — встроенного языка платформы 1С:Предприятие (используется в конфигурациях типа УТ, ЗУП, БП и т.д.). Для проектов на 1С код сейчас попадает в граф только как обычный текст (без AST), либо не индексируется вовсе.
Почему это важно
1С — один из самых распространённых языков для учётных систем в России, СНГ и ряде других стран. Конфигурации на 1С часто содержат сотни модулей со сложными связями (общие модули, модули объектов, модули менеджеров, модули форм), и граф вызовов/зависимостей был бы так же полезен, как для Python/Go/Java проектов.
Особенности синтаксиса, критичные для парсера
- Двуязычность ключевых слов — 1С поддерживает русские и английские варианты одних и тех же конструкций: Процедура/Procedure, КонецПроцедуры/EndProcedure, Функция/Function, КонецФункции/EndFunction, Если/If, Тогда/Then, КонецЕсли/EndIf. Экспорт/Export — модификатор, определяющий видимость процедуры/функции извне модуля (аналог public).
-
- Аннотации компиляции — &НаСервере, &НаКлиенте, &НаСервереБезКонтекста перед процедурой определяют контекст выполнения (клиент/сервер). Это критично для построения корректного графа: клиентская процедура может вызывать серверную только через явный вызов, помеченный соответствующей директивой — само наличие такого вызова уже говорит о клиент-серверном взаимодействии.
-
-
- Директивы препроцессора — #Если Сервер Тогда / #КонецЕсли (условная компиляция под разные платформы выполнения), а также #Область / #КонецОбласти — секции, группирующие процедуры логически.
Пример фрагмента (модуль формы, реальный код из конфигурации УТ 11)
ОбеспечениеВДокументахКлиент.ПроверитьЗапуститьФоновоеЗаданиеРаспределенияЗапасов();
КонецПроцедуры
&НаСервереБезКонтекста
Процедура СписокРеализацииТоваровУслугПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
СоответствиеТребованиямГИСМТ.ПриПолученииДанныхНаСервереДокумента(Строки);
КонецПроцедуры
#КонецОбласти#Область ОбработчикиКомандФормы
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.СписокРеализацииТоваровУслуг);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
Обратите внимание на последние две процедуры: Подключаемый_ПродолжитьВыполнениеКомандыНаСервере (клиент, Экспорт) вызывает ВыполнитьКомандуНаСервере (сервер) — типичный паттерн клиент-серверного взаимодействия, который граф должен уметь отразить как calls-связь с пометкой о смене контекста выполнения.
Предлагаемый объём работ (по аналогии с ARCHITECTURE.md → "how to add a language")
- tree-sitter грамматика для BSL (стоит проверить существующие community-грамматики tree-sitter-bsl, если такие есть)
-
- Разбор Экспорт/Export как признака публичного интерфейса модуля (аналог edge EXTRACTED для публичных методов)
-
-
- Учёт &НаСервере/&НаКлиенте/&НаСервереБезКонтекста как метаданных узла — полезно для флага "клиент-серверный вызов" в графе
-
-
-
- Учёт #Область/#КонецОбласти как смысловой группировки (опционально, но полезно для community detection)
-
-
-
-
- Тестовые фикстуры с примерами двуязычного синтаксиса (RU/EN варианты ключевых слов)
Дополнительно
Готов протестировать draft-реализацию на реальном проекте (конфигурация УТ 11) и предоставить фидбек / worked example по образцу worked/{slug}/ из репозитория.
Описание
Сейчас graphify поддерживает 36 языков через tree-sitter грамматики, но среди них нет BSL — встроенного языка платформы 1С:Предприятие (используется в конфигурациях типа УТ, ЗУП, БП и т.д.). Для проектов на 1С код сейчас попадает в граф только как обычный текст (без AST), либо не индексируется вовсе.
Почему это важно
1С — один из самых распространённых языков для учётных систем в России, СНГ и ряде других стран. Конфигурации на 1С часто содержат сотни модулей со сложными связями (общие модули, модули объектов, модули менеджеров, модули форм), и граф вызовов/зависимостей был бы так же полезен, как для Python/Go/Java проектов.
Особенности синтаксиса, критичные для парсера
Пример фрагмента (модуль формы, реальный код из конфигурации УТ 11)
Обратите внимание на последние две процедуры: Подключаемый_ПродолжитьВыполнениеКомандыНаСервере (клиент, Экспорт) вызывает ВыполнитьКомандуНаСервере (сервер) — типичный паттерн клиент-серверного взаимодействия, который граф должен уметь отразить как calls-связь с пометкой о смене контекста выполнения.
Предлагаемый объём работ (по аналогии с ARCHITECTURE.md → "how to add a language")
Дополнительно
Готов протестировать draft-реализацию на реальном проекте (конфигурация УТ 11) и предоставить фидбек / worked example по образцу worked/{slug}/ из репозитория.