diff options
| author | Dax Raad <[email protected]> | 2025-11-21 18:27:16 -0500 |
|---|---|---|
| committer | Dax Raad <[email protected]> | 2025-11-21 18:27:25 -0500 |
| commit | f5ac98251eec55130f1db2ca65c56d53dfa5f3a1 (patch) | |
| tree | 4bb39bc10b5691473cbcf1f70ea927c493d89f1c /packages | |
| parent | 78239045ba8cfe33115711ad0ba83601ef09bece (diff) | |
| download | opencode-f5ac98251eec55130f1db2ca65c56d53dfa5f3a1.tar.gz opencode-f5ac98251eec55130f1db2ca65c56d53dfa5f3a1.zip | |
tui: split revert memo into smaller tracked computations to prevent unnecessary re-evaluations
Diffstat (limited to 'packages')
| -rw-r--r-- | packages/opencode/src/cli/cmd/tui/routes/session/index.tsx | 76 |
1 files changed, 41 insertions, 35 deletions
diff --git a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx index f028e8a6c..6c83bf68c 100644 --- a/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/routes/session/index.tsx @@ -653,44 +653,50 @@ export function Session() { }, ]) - const revert = createMemo(() => { - const s = session() - if (!s) return - const messageID = s.revert?.messageID - if (!messageID) return - const reverted = messages().filter((x) => x.id >= messageID && x.role === "user") - - const diffFiles = (() => { - const diffText = s.revert?.diff || "" - if (!diffText) return [] + const revertInfo = createMemo(() => session()?.revert) + const revertMessageID = createMemo(() => revertInfo()?.messageID) + + const revertDiffFiles = createMemo(() => { + const diffText = revertInfo()?.diff ?? "" + if (!diffText) return [] + + try { + const patches = parsePatch(diffText) + return patches.map((patch) => { + const filename = patch.newFileName || patch.oldFileName || "unknown" + const cleanFilename = filename.replace(/^[ab]\//, "") + return { + filename: cleanFilename, + additions: patch.hunks.reduce( + (sum, hunk) => sum + hunk.lines.filter((line) => line.startsWith("+")).length, + 0, + ), + deletions: patch.hunks.reduce( + (sum, hunk) => sum + hunk.lines.filter((line) => line.startsWith("-")).length, + 0, + ), + } + }) + } catch (error) { + return [] + } + }) - try { - const patches = parsePatch(diffText) - return patches.map((patch) => { - const filename = patch.newFileName || patch.oldFileName || "unknown" - const cleanFilename = filename.replace(/^[ab]\//, "") - return { - filename: cleanFilename, - additions: patch.hunks.reduce( - (sum, hunk) => sum + hunk.lines.filter((line) => line.startsWith("+")).length, - 0, - ), - deletions: patch.hunks.reduce( - (sum, hunk) => sum + hunk.lines.filter((line) => line.startsWith("-")).length, - 0, - ), - } - }) - } catch (error) { - return [] - } - })() + const revertRevertedMessages = createMemo(() => { + const messageID = revertMessageID() + if (!messageID) return [] + return messages().filter((x) => x.id >= messageID && x.role === "user") + }) + const revert = createMemo(() => { + const info = revertInfo() + if (!info) return + if (!info.messageID) return return { - messageID, - reverted, - diff: s.revert!.diff, - diffFiles, + messageID: info.messageID, + reverted: revertRevertedMessages(), + diff: info.diff, + diffFiles: revertDiffFiles(), } }) |
