From 21d616f8ed5cf84bbb9ae743aada3ffd3b7a6b10 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Thu, 26 Jun 2025 11:05:17 +0400 Subject: [PATCH] fix: code interpreter code editor issue --- src/lib/components/common/CodeEditor.svelte | 49 +++++++++------------ 1 file changed, 21 insertions(+), 28 deletions(-) diff --git a/src/lib/components/common/CodeEditor.svelte b/src/lib/components/common/CodeEditor.svelte index 400f2c568..6f178fdc6 100644 --- a/src/lib/components/common/CodeEditor.svelte +++ b/src/lib/components/common/CodeEditor.svelte @@ -48,35 +48,28 @@ /** * Finds multiple diffs in two strings and generates minimal change edits. */ - function findChanges(oldStr, newStr) { - let changes = []; - let oldIndex = 0, - newIndex = 0; - - while (oldIndex < oldStr.length || newIndex < newStr.length) { - if (oldStr[oldIndex] !== newStr[newIndex]) { - let start = oldIndex; - - // Identify the changed portion - while (oldIndex < oldStr.length && oldStr[oldIndex] !== newStr[newIndex]) { - oldIndex++; - } - while (newIndex < newStr.length && newStr[newIndex] !== oldStr[start]) { - newIndex++; - } - - changes.push({ - from: start, - to: oldIndex, // Replace the differing part - insert: newStr.substring(start, newIndex) - }); - } else { - oldIndex++; - newIndex++; - } + function findChanges(oldStr: string, newStr: string) { + // Find the start of the difference + let start = 0; + while (start < oldStr.length && start < newStr.length && oldStr[start] === newStr[start]) { + start++; } - - return changes; + // If equal, nothing to change + if (oldStr === newStr) return []; + // Find the end of the difference by comparing backwards + let endOld = oldStr.length, + endNew = newStr.length; + while (endOld > start && endNew > start && oldStr[endOld - 1] === newStr[endNew - 1]) { + endOld--; + endNew--; + } + return [ + { + from: start, + to: endOld, + insert: newStr.slice(start, endNew) + } + ]; } export let id = '';