fix(cfe-patch-method): -Check ловит расхождение списка параметров

-Check сравнивал только тело и сигнатуру не смотрел вовсе. Если поставщик добавил
методу параметр, а тело не изменил (новый параметр часто ещё не используется),
платформа перехватчик отвергает — «Список параметров метода "X" не соответствует
методу "Y"» — а -Check говорил АКТУАЛЕН, и починка не запускалась.

Замер на стенде (8.3.24, /CheckCanApplyConfigurationExtensions + рантайм): платформа
сверяет только ЧИСЛО параметров. Имена, значения по умолчанию и лишний Экспорт не
сравнивает; дефолты копии вдобавок не действуют — берутся из оригинала. Поэтому
сверяем количество и ничего сверх того, иначе получили бы ложный дрейф там, где
платформа молчит.

Число параметров считается существующим Split-TopLevel по ParamsText обеих сторон;
при расхождении метод идёт обычной веткой дрейфа со статусом ДРЕЙФ и причиной
«список параметров: в оригинале N, в перехватчике M». -Actualize починку уже умел:
он собирает строку сигнатуры заново из оригинала — не запускался только потому, что
-Check не звал.

Кейсы: расхождение числа (ДРЕЙФ), переименованные параметры с другим дефолтом
(АКТУАЛЕН, как у платформы) и -Actualize, переписывающий список параметров.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QoAJmoNbgWKobA7JGgN5S3
This commit is contained in:
Nick Shirokov
2026-08-30 19:17:18 +03:00
co-authored by Claude Opus 5
parent 533dd0ded4
commit d4832ce363
25 changed files with 1083 additions and 5 deletions
@@ -0,0 +1,55 @@
{
"name": "-Check: у оригинала прибавился параметр, тело не менялось — дрейф (платформа такой перехватчик отвергает)",
"preRun": [
{
"script": "meta-compile/scripts/meta-compile",
"input": {
"type": "CommonModule",
"name": "БатчМод",
"context": "server"
},
"args": {
"-JsonPath": "{inputFile}",
"-OutputDir": "{workDir}"
}
},
{
"writeFile": {
"path": "CommonModules/БатчМод/Ext/Module.bsl",
"content": "#Область ПрограммныйИнтерфейс\n\nФункция Расчёт(А, Б = 5) Экспорт\n\tХ = 1;\n\tВозврат Х;\nКонецФункции\n\n#КонецОбласти\n"
}
},
{
"script": "cfe-init/scripts/cfe-init",
"args": {
"-Name": "Тест",
"-OutputDir": "{workDir}/cfe",
"-ConfigPath": "{workDir}"
}
},
{
"script": "cfe-borrow/scripts/cfe-borrow",
"args": {
"-ExtensionPath": "{workDir}/cfe",
"-ConfigPath": "{workDir}",
"-Object": "CommonModule.БатчМод"
}
},
{
"writeFile": {
"path": "cfe/CommonModules/БатчМод/Ext/Module.bsl",
"content": "#Область ПрограммныйИнтерфейс\n&ИзменениеИКонтроль(\"Расчёт\")\nФункция Тест_Расчёт(А)\n\tХ = 1;\n\tВозврат Х;\nКонецФункции\n#КонецОбласти\n"
}
}
],
"params": {
"extensionPath": "cfe"
},
"args_extra": [
"-Check"
],
"expectError": true,
"expect": {
"stdoutContains": "ДРЕЙФ"
}
}