mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-09-01 16:00:51 +03:00
fix(cfe-patch-method): ключ сравнения контроля — по измеренному правилу платформы
-Check считал дрейфом расхождение по пустым строкам (шумный ложный ДРЕЙФ, из-за которого -Actualize предлагал косметическую перезапись тела) и НЕ считал дрейфом расхождение по пробелам между токенами (тихий ложный АКТУАЛЕН — платформа такой метод молча не применяет, он рвётся при первом вызове). Правило платформы измерено на стенде: 27 вариантов косметики, платформы 8.3.24 и 8.3.27, общий модуль и модуль объекта, два независимых оракула (/CheckCanApplyConfigurationExtensions и рантайм-вызов метода) — результат везде одинаковый. Каждая строка Trim, строки, пустые после Trim, из сравнения выброшены, всё остальное байт в байт и с учётом регистра: значимы пробелы между токенами, пробелы внутри строкового литерала, комментарии целиком и регистр. Вердикт АКТУАЛЕН считается по этому правилу (Get-ControlKey / control_key); в PS сравнение ordinal, иначе -eq игнорирует регистр и порт расходится с Python. Эвристики слияния (якоря, поглощение, дифф) остались на прежнем мягком normalize. Кейсы: допуски (пустые строки, отступ, хвостовые пробелы) и два негатива — пробелы между токенами и регистр идентификатора. Co-Authored-By: Sergei Pleshanov <2357qwr@gmail.com> Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QoAJmoNbgWKobA7JGgN5S3
This commit is contained in:
co-authored by
Sergei Pleshanov
Claude Opus 5
parent
4fa57c73b5
commit
533dd0ded4
@@ -1,4 +1,4 @@
|
||||
# cfe-patch-method v2.9 — Source-aware method interceptor for 1C extension (CFE)
|
||||
# cfe-patch-method v2.10 — Source-aware method interceptor for 1C extension (CFE)
|
||||
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
|
||||
[CmdletBinding(PositionalBinding=$false)]
|
||||
param(
|
||||
@@ -362,6 +362,14 @@ function Get-Normalized {
|
||||
return (($line -replace '\s+', ' ').Trim())
|
||||
}
|
||||
|
||||
# Control comparison key, as the platform compares a &ИзменениеИКонтроль copy with the original:
|
||||
# each line trimmed, blank lines dropped, everything else byte-for-byte and case-sensitive
|
||||
# (inner spaces, comments and letter case are significant). Measured on 8.3.24 and 8.3.27.
|
||||
function Get-ControlKey {
|
||||
param($lines)
|
||||
return (@($lines | ForEach-Object { $_.Trim() } | Where-Object { $_ -ne '' }) -join "`n")
|
||||
}
|
||||
|
||||
# Reconstruct v1 body and edit ops from a marked body
|
||||
function Parse-MarkedBody {
|
||||
param($bodyLines)
|
||||
@@ -651,7 +659,7 @@ function Invoke-Resync {
|
||||
$v1norm = @($v1 | ForEach-Object { Get-Normalized $_ })
|
||||
$v2norm = @($v2 | ForEach-Object { Get-Normalized $_ })
|
||||
|
||||
if (($v1norm -join "`n") -eq ($v2norm -join "`n")) {
|
||||
if ([string]::Equals((Get-ControlKey $v1), (Get-ControlKey $v2), 'Ordinal')) {
|
||||
return @{ Id = $methodId; Status = 'АКТУАЛЕН'; ExtBsl = $extBsl }
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user