fix(hashline): restore v3.11.2 legacy hash computation for backward compatibility

🤖 Generated with [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-openagent)
This commit is contained in:
YeonGyu-Kim
2026-03-16 13:52:26 +09:00
parent 8c4fa47e5e
commit 1339ecdd13
3 changed files with 23 additions and 1 deletions

View File

@@ -72,6 +72,19 @@ describe("computeLineHash", () => {
expect(hash1).toBe(hash2)
})
it("preserves legacy hashes for internal whitespace variants", () => {
//#given
const content1 = "if (a && b) {"
const content2 = "if(a&&b){"
//#when
const hash1 = computeLegacyLineHash(1, content1)
const hash2 = computeLegacyLineHash(1, content2)
//#then
expect(hash1).toBe(hash2)
})
it("ignores trailing whitespace differences", () => {
//#given
const content1 = "function hello() {"

View File

@@ -16,7 +16,7 @@ export function computeLineHash(lineNumber: number, content: string): string {
}
export function computeLegacyLineHash(lineNumber: number, content: string): string {
return computeNormalizedLineHash(lineNumber, content.replace(/\r/g, "").trim())
return computeNormalizedLineHash(lineNumber, content.replace(/\r/g, "").replace(/\s+/g, ""))
}
export function formatHashLine(lineNumber: number, content: string): string {

View File

@@ -125,6 +125,15 @@ describe("validateLineRef", () => {
expect(() => validateLineRef(lines, `1#${legacyHash}`)).not.toThrow()
})
it("accepts legacy hashes for internal whitespace variants", () => {
//#given
const lines = ["if (a && b) {"]
const legacyHash = computeLegacyLineHash(1, "if(a&&b){")
//#when / #then
expect(() => validateLineRef(lines, `1#${legacyHash}`)).not.toThrow()
})
it("shows >>> mismatch context in batched validation", () => {
//#given
const lines = ["one", "two", "three", "four"]