From c937abfc83a8cf3ebe5fa48dfc26ce47dd8e09b4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 20 Aug 2025 09:01:00 +0000 Subject: [PATCH 1/2] Initial plan From 2031fd3198bd5e37a88763bc8aaf53774cf98c5c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 20 Aug 2025 09:07:06 +0000 Subject: [PATCH 2/2] Refactor codebase: improve method organization and remove redundancies Co-authored-by: takahc <108157287+takahc@users.noreply.github.com> --- public/index_image_panel.js | 10 +-- src/tracker.ts | 130 +++++++++++++----------------------- 2 files changed, 50 insertions(+), 90 deletions(-) diff --git a/public/index_image_panel.js b/public/index_image_panel.js index 879e61b..bf9b78e 100644 --- a/public/index_image_panel.js +++ b/public/index_image_panel.js @@ -336,23 +336,17 @@ class BreakpointCapture { const workspaceFolder = this.vscodeMeta.workspaceFolder; const sourcePathRelative = this.meta.source.path.replace(workspaceFolder, "."); const sourcePathExp = `${sourcePathRelative}:${meta.line}:${meta.column}`; - this.frameInfoDom.innerHTML = `${sourcePathExp}`; + + this.frameInfoDom.innerHTML = sourcePathExp; this.frameInfoDom.onclick = () => { console.log("Open file", meta.source.path, "pos:", [meta.line, meta.column]); - // revealTextFile(meta.frame.source.path, [meta.frame.line, meta.frame.column]); vscodeOpen(meta.source.path, [meta.line, meta.column]); }; - - this.frameInfoDom.innerHTML = `${this.meta.source.path}:${this.meta.line}:${this.meta.column}`; } addImageIdxCapture(imageTraceId, imageIdx) { this.imageTraceIdxDict[imageTraceId] = imageIdx; } - vscodeOpen(uri, pos = undefined) { - vscodeOpen(uri, pos); - } - setLink(prev, next) { if (prev !== undefined) { this.setPrev(prev); diff --git a/src/tracker.ts b/src/tracker.ts index 4c39b78..53d5366 100644 --- a/src/tracker.ts +++ b/src/tracker.ts @@ -1,7 +1,5 @@ import * as vscode from 'vscode'; import { VariableViewPanel } from './panel'; -import { register } from 'module'; - import { DebugSessionTracker } from './variable/debugSessionTracker'; import { DebugVariable } from './variable/debugVariable'; import { VariableTypeFactory } from './variable/variableTypeFactory'; @@ -30,44 +28,36 @@ export class VariableTracker implements vscode.DebugAdapterTracker { } async procImagePanel(message: any) { - VariableTypeFactory.loadSettings(); + await this.initializeImagePanel(); + const sessionTracker = this.setupSessionTracker(message); + const variables = await this.fetchVariables(sessionTracker, message); + const imageMetaWides = await this.processImageVariables(sessionTracker); + await this.renderImagePanel(imageMetaWides, message); + } + private async initializeImagePanel(): Promise { + VariableTypeFactory.loadSettings(); VariableViewPanel.render(this._context); - const panel = VariableViewPanel.currentPanel; - if (panel) { - // panel.showPanel(); - } VariableViewPanel.sendInstanceMessage("WAIT FOR IMAGES..."); + } - + private setupSessionTracker(message: any): DebugSessionTracker { const session = vscode.debug.activeDebugSession; - - // Create new tracker to manage debug variables every frames and threads, - // not to share them among debug trackers even if they have same session. DebugSessionTracker.newSessionTracker(this._context, session!); - let sessionTracker = DebugSessionTracker.currentTracker!; + const sessionTracker = DebugSessionTracker.currentTracker!; DebugSessionTracker.breakCount++; - const threadId = message.body.threadId; - - // const stackTrace = await session?.customRequest('stackTrace', { threadId }); - // const frameId = stackTrace.stackFrames[0].id; - // const scopes = await session?.customRequest('scopes', { frameId }); - - // console.log(frameId); - // console.log(stackTrace); - // console.log("scopes", scopes); - // for (const scope of scopes.scopes) { - // const variables = await session?.customRequest('variables', { variablesReference: scope.variablesReference }); - // console.log(variables); - // // Here you can process the variables as needed - // } + return sessionTracker; + } + private async fetchVariables(sessionTracker: DebugSessionTracker, message: any): Promise { + const threadId = message.body.threadId; console.log("fetchLocalVariablesInFirstFrame", sessionTracker); + const thread = sessionTracker.addThread(threadId, [], message.body); const variables = await thread.fetchLocalVariablesInFirstFrame(); console.log("fetchLocalVariablesInFirstFrame", variables); - let values: any = []; + const values: any = []; variables.forEach((variable: DebugVariable) => { values.push(variable.getVariableValuesAsDict()); }); @@ -76,6 +66,10 @@ export class VariableTracker implements vscode.DebugAdapterTracker { const allVariables = sessionTracker.gatherAllVariables(); console.log(allVariables); + return variables; + } + + private async processImageVariables(sessionTracker: DebugSessionTracker): Promise { const imageVariables: ImageVariable[] = sessionTracker.gatherImageVariables(); console.log(imageVariables); @@ -83,37 +77,23 @@ export class VariableTracker implements vscode.DebugAdapterTracker { for (const imageVariable of imageVariables) { imageVariable.updateImageInfo(); imageVariable.updateBinaryInfo(); - const metaWide = await imageVariable.toFile(); // toFile() may return undefined if the image could not read properly. + const metaWide = await imageVariable.toFile(); if (metaWide) { imageMetaWides.push(metaWide); } - // imageVariable.toFile(); } + return imageMetaWides; + } + private async renderImagePanel(imageMetaWides: any[], message: any): Promise { console.log("rendering panel"); VariableViewPanel.render(this._context, "image-panel"); + const panel = VariableViewPanel.currentPanel; + if (panel) { - // Set web url - for (const metaWide of imageMetaWides) { - metaWide.imageWebUrl = panel.getWebViewUrlString(vscode.Uri.file(metaWide.vscode.filePath)); - } - console.log("imageMetaWides", imageMetaWides); - - // Display - // const openPath = vscode.Uri.file(filePath.toString()).toString().replace("/file:", ""); - // vscode.commands.executeCommand('vscode.open', filePath.fsPath); - console.log("showing images on panel", panel); - const workspaceFolders = vscode.workspace.workspaceFolders; - panel.postMessage({ - command: "images", - metas: imageMetaWides, - breakpointMeta: message.body, - vscodeMeta: { workspaceFolders } - - }); - panel.showPanel(); - + this.setImageWebUrls(panel, imageMetaWides); + this.displayImages(panel, imageMetaWides, message); console.log("DONE!!"); } else { console.log("panel is undefined"); @@ -124,39 +104,25 @@ export class VariableTracker implements vscode.DebugAdapterTracker { VariableViewPanel.sendInstanceMessage("DONE!"); } - // public onDidSendMessage(message: any) { - // console.log(Object.assign({}, message)); - // if ((message.type === 'event' && message.event === 'output') || - // (message.type === 'response' && message.command === 'evaluate')) { - // console.log(Object.assign({}, message)); - // if ((message.body && message.body.category === 'stdout') || - // (message.boy)) { - // console.log('message.body', message.body); - // if (!this._panel) { - // console.log("this._panel is undefined") - // this._panel = new VariableViewPanel(this._context); - // } - // else{ - // console.log("this._panel is NOT undefined") - // } - // console.log("this._panel.isPanelExist 1", this._panel.isPanelExist()); - // this._panel.render(); - // this._panel.showPanel(vscode.ViewColumn.Two); - // console.log("this._panel.isPanelExist 2", this._panel.isPanelExist()); - - // let variableOut = { - // message, - // name: message.body.variablesReference, - // value: message.body.output - // }; - - // console.log("this._panel.isPanelExist 3", this._panel.isPanelExist()); - // console.log("posting message to panel") - // this._panel.postMessage({ command: 'variable', output: variableOut }); - // console.log("this._panel.isPanelExist 4", this._panel.isPanelExist()); - // } - // } - // } + private setImageWebUrls(panel: VariableViewPanel, imageMetaWides: any[]): void { + for (const metaWide of imageMetaWides) { + metaWide.imageWebUrl = panel.getWebViewUrlString(vscode.Uri.file(metaWide.vscode.filePath)); + } + console.log("imageMetaWides", imageMetaWides); + } + + private displayImages(panel: VariableViewPanel, imageMetaWides: any[], message: any): void { + console.log("showing images on panel", panel); + const workspaceFolders = vscode.workspace.workspaceFolders; + + panel.postMessage({ + command: "images", + metas: imageMetaWides, + breakpointMeta: message.body, + vscodeMeta: { workspaceFolders } + }); + panel.showPanel(); + } }