feat(epf-build): общие модули конфигурации в проверке исходников через configSrc

Проверка исходников идёт в конфигурации-заглушке, где общих модулей не было:
обработка с кодом БСП не собиралась без -Checks off.

- stub-db-create -ConfigSrc: общие модули, к которым обращается код, получают
  пустых двойников с флагами контекста из выгрузки; неизвестные имена не
  угадываются
- epf-build -ConfigSrc, по умолчанию configSrc базы из .v8-project.json
- подсказки к «Переменная не определена (X)»: модуль не в том контексте /
  модуля нет в configSrc / выгрузка не передана (с -ConfigSrc и -Checks off)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-09-25 21:21:28 +03:00
co-authored by Claude Opus 5.5
parent b43d4050a6
commit 636344666d
9 changed files with 575 additions and 10 deletions
@@ -0,0 +1,58 @@
{
"name": "С -ConfigSrc: модуль есть, но не в контексте / модуля нет — разные подсказки, без -Checks off (fake platform)",
"osOnly": "win32",
"fakePlatform": {
"exit": 0,
"log": "",
"check": {
"exit": 101,
"log": "{Обработка.Тест.МодульОбъекта(2,2)}: Переменная не определена (ОбщегоНазначения)\r\n\t<<?>>ОбщегоНазначения.СообщитьПользователю(\"x\"); (Проверка: Сервер)\r\n{Обработка.Тест.МодульОбъекта(3,2)}: Переменная не определена (ОбщегоНазначениеее)\r\n\t<<?>>ОбщегоНазначениеее.Метод(); (Проверка: Сервер)\r\n"
}
},
"preRun": [
{
"script": "epf-init/scripts/init",
"args": {
"-Name": "Тест",
"-SrcDir": "{workDir}/src"
}
},
{
"writeFile": {
"path": "src/Тест/Ext/ObjectModule.bsl",
"content": "Процедура Проба()\r\n\tОбщегоНазначения.СообщитьПользователю(\"x\");\r\nКонецПроцедуры\r\n"
}
},
{
"writeFile": {
"path": "cfgsrc/CommonModules/ОбщегоНазначения.xml",
"content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<MetaDataObject xmlns=\"http://v8.1c.ru/8.3/MDClasses\" version=\"2.17\">\n\t<CommonModule uuid=\"10000000-0000-0000-0000-000000000001\">\n\t\t<Properties>\n\t\t\t<Name>ОбщегоНазначения</Name>\n\t\t\t<Server>true</Server>\n\t\t</Properties>\n\t</CommonModule>\n</MetaDataObject>\n"
}
}
],
"args_extra": [
"-V8Path",
"{workDir}\\fake.cmd",
"-InfoBasePath",
"{workDir}\\ib",
"-SourceFile",
"{workDir}\\src\\Тест.xml",
"-OutputFile",
"{workDir}\\build\\Тест.epf",
"-ConfigSrc",
"{workDir}\\cfgsrc"
],
"expect": {
"stdoutContains": [
"Общие модули из configSrc: ОбщегоНазначения",
"[hint] общий модуль ОбщегоНазначения есть в configSrc, но недоступен в контексте проверки",
"[hint] общего модуля ОбщегоНазначениеее нет в configSrc"
],
"stdoutNotContains": [
"/LoadExternalDataProcessorOrReportFromFiles",
"-Checks off"
]
},
"expectError": true,
"noSnapshot": "сборка отменена — артефакта нет по замыслу"
}
@@ -0,0 +1,44 @@
{
"name": "Неопределённый общий модуль без configSrc: подсказка про -ConfigSrc и -Checks off (fake platform)",
"osOnly": "win32",
"fakePlatform": {
"exit": 0,
"log": "",
"check": {
"exit": 101,
"log": "{Обработка.Тест.МодульОбъекта(2,2)}: Переменная не определена (ОбщегоНазначения)\r\n\t<<?>>ОбщегоНазначения.СообщитьПользователю(\"x\"); (Проверка: Сервер)\r\n{Обработка.Тест.МодульОбъекта(3,2)}: Переменная не определена (ОбщегоНазначения)\r\n\t<<?>>ОбщегоНазначения.Прочее(); (Проверка: Сервер)\r\n{Обработка.Тест.МодульОбъекта(4,2)}: Переменная не определена (Сумма)\r\n\tХ = <<?>>Сумма + 1; (Проверка: Сервер)\r\n"
}
},
"preRun": [
{
"script": "epf-init/scripts/init",
"args": {
"-Name": "Тест",
"-SrcDir": "{workDir}/src"
}
}
],
"args_extra": [
"-V8Path",
"{workDir}\\fake.cmd",
"-InfoBasePath",
"{workDir}\\ib",
"-SourceFile",
"{workDir}\\src\\Тест.xml",
"-OutputFile",
"{workDir}\\build\\Тест.epf"
],
"expect": {
"stdoutContains": [
"[hint] похоже на общий модуль конфигурации",
"[hint] Общие модули конфигурации проверке не видны: ОбщегоНазначения.",
"-Checks off"
],
"stdoutNotContains": [
"/LoadExternalDataProcessorOrReportFromFiles",
"проверке не видны: ОбщегоНазначения, Сумма"
]
},
"expectError": true,
"noSnapshot": "сборка отменена — артефакта нет по замыслу"
}
@@ -0,0 +1,129 @@
{
"name": "Общие модули из -ConfigSrc: только те, к которым обращается код, с флагами из выгрузки",
"fakePlatform": {
"exit": 1,
"log": ""
},
"preRun": [
{
"writeFile": {
"path": "src/Проба.xml",
"content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<MetaDataObject xmlns=\"http://v8.1c.ru/8.3/MDClasses\" xmlns:v8=\"http://v8.1c.ru/8.1/data/core\" xmlns:xr=\"http://v8.1c.ru/8.3/xcf/readable\" version=\"2.17\">\n\t<ExternalDataProcessor uuid=\"aaaaaaaa-1111-2222-3333-bbbbbbbbbbbb\">\n\t\t<InternalInfo>\n\t\t\t<xr:GeneratedType name=\"ExternalDataProcessorObject.Проба\" category=\"Object\">\n\t\t\t\t<xr:TypeId>cccccccc-4444-5555-6666-dddddddddddd</xr:TypeId>\n\t\t\t\t<xr:ValueId>eeeeeeee-7777-8888-9999-ffffffffffff</xr:ValueId>\n\t\t\t</xr:GeneratedType>\n\t\t</InternalInfo>\n\t\t<Properties>\n\t\t\t<Name>Проба</Name>\n\t\t</Properties>\n\t\t<ChildObjects/>\n\t</ExternalDataProcessor>\n</MetaDataObject>\n"
}
},
{
"writeFile": {
"path": "src/Проба/Ext/ObjectModule.bsl",
"content": "Процедура Проба()\r\n\tОбщМод.Метод();\r\n\tобщмод2.Метод(\"ЛишнийМодуль.Х\"); // КомментМодуль.Х\r\n\tТекст = \"ВЫБРАТЬ\r\n\t|ТекстМодуль.Поле\";\r\n\tНетВКонфиге.Метод();\r\n\tЗапрос.Текст = Модуль3 .Поле;\r\nТ = \"ВЫБРАТЬ\r\n\t|ГДЕ Ложь\"; Модуль4.Метод();\r\nКонецПроцедуры\r\n"
}
},
{
"writeFile": {
"path": "cfgsrc/CommonModules/ОбщМод.xml",
"content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<MetaDataObject xmlns=\"http://v8.1c.ru/8.3/MDClasses\" version=\"2.20\">\n\t<CommonModule uuid=\"10000000-0000-0000-0000-000000000001\">\n\t\t<Properties>\n\t\t\t<Name>ОбщМод</Name>\n\t\t\t<Global>false</Global>\n\t\t\t<ClientManagedApplication>false</ClientManagedApplication>\n\t\t\t<Server>true</Server>\n\t\t\t<ExternalConnection>true</ExternalConnection>\n\t\t\t<ClientOrdinaryApplication>false</ClientOrdinaryApplication>\n\t\t\t<ServerCall>true</ServerCall>\n\t\t\t<Privileged>false</Privileged>\n\t\t\t<ReturnValuesReuse>DuringRequest</ReturnValuesReuse>\n\t\t</Properties>\n\t</CommonModule>\n</MetaDataObject>\n"
}
},
{
"writeFile": {
"path": "cfgsrc/CommonModules/ОбщМод2.xml",
"content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<MetaDataObject xmlns=\"http://v8.1c.ru/8.3/MDClasses\" version=\"2.20\">\n\t<CommonModule uuid=\"10000000-0000-0000-0000-000000000002\">\n\t\t<Properties>\n\t\t\t<Name>ОбщМод2</Name>\n\t\t\t<ClientManagedApplication>true</ClientManagedApplication>\n\t\t\t<Server>true</Server>\n\t\t</Properties>\n\t</CommonModule>\n</MetaDataObject>\n"
}
},
{
"writeFile": {
"path": "cfgsrc/CommonModules/Модуль3.xml",
"content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<MetaDataObject xmlns=\"http://v8.1c.ru/8.3/MDClasses\" version=\"2.20\">\n\t<CommonModule uuid=\"10000000-0000-0000-0000-000000000003\">\n\t\t<Properties>\n\t\t\t<Name>Модуль3</Name>\n\t\t\t<Server>true</Server>\n\t\t</Properties>\n\t</CommonModule>\n</MetaDataObject>\n"
}
},
{
"writeFile": {
"path": "cfgsrc/CommonModules/ЛишнийМодуль.xml",
"content": "<MetaDataObject/>\n"
}
},
{
"writeFile": {
"path": "cfgsrc/CommonModules/КомментМодуль.xml",
"content": "<MetaDataObject/>\n"
}
},
{
"writeFile": {
"path": "cfgsrc/CommonModules/ТекстМодуль.xml",
"content": "<MetaDataObject/>\n"
}
},
{
"writeFile": {
"path": "cfgsrc/CommonModules/НеИспользуется.xml",
"content": "<MetaDataObject/>\n"
}
},
{
"writeFile": {
"path": "cfgsrc/CommonModules/Модуль4.xml",
"content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<MetaDataObject xmlns=\"http://v8.1c.ru/8.3/MDClasses\" version=\"2.20\">\n\t<CommonModule uuid=\"10000000-0000-0000-0000-000000000004\">\n\t\t<Properties>\n\t\t\t<Name>Модуль4</Name>\n\t\t\t<Server>true</Server>\n\t\t</Properties>\n\t</CommonModule>\n</MetaDataObject>\n"
}
}
],
"args_extra": [
"-SourceDir",
"{workDir}/src",
"-V8Path",
"{fakePlatform}",
"-TempBasePath",
"{workDir}/base",
"-EmbedSourceFile",
"{workDir}/src/Проба.xml",
"-ConfigSrc",
"{workDir}/cfgsrc"
],
"expect": {
"stdoutContains": [
"Общие модули из configSrc: Модуль3, Модуль4, ОбщМод, ОбщМод2"
],
"files": [
"base/cfg/CommonModules/ОбщМод/Ext/Module.bsl",
"base/cfg/CommonModules/ОбщМод2/Ext/Module.bsl",
"base/cfg/CommonModules/Модуль3.xml"
],
"filesAbsent": [
"base/cfg/CommonModules/ЛишнийМодуль.xml",
"base/cfg/CommonModules/КомментМодуль.xml",
"base/cfg/CommonModules/ТекстМодуль.xml",
"base/cfg/CommonModules/НеИспользуется.xml",
"base/cfg/CommonModules/НетВКонфиге.xml"
],
"fileContains": [
{
"file": "base/cfg/CommonModules/ОбщМод.xml",
"text": [
"<Name>ОбщМод</Name>",
"<ClientManagedApplication>false</ClientManagedApplication>",
"<Server>true</Server>",
"<ExternalConnection>true</ExternalConnection>",
"<ServerCall>true</ServerCall>",
"version=\"2.17\""
]
},
{
"file": "base/cfg/CommonModules/ОбщМод2.xml",
"text": [
"<Name>ОбщМод2</Name>",
"<ClientManagedApplication>true</ClientManagedApplication>",
"<ServerCall>false</ServerCall>"
]
},
{
"file": "base/cfg/Configuration.xml",
"text": [
"<CommonModule>ОбщМод</CommonModule>",
"<CommonModule>ОбщМод2</CommonModule>",
"<CommonModule>Модуль3</CommonModule>"
]
}
]
},
"expectError": true,
"noSnapshot": "платформа фейковая: проверяется сгенерированная конфигурация, а не база"
}