From 848d216ba9a8e0194043826cb359d37f972547d1 Mon Sep 17 00:00:00 2001 From: Connor Peet Date: Wed, 25 Sep 2024 13:50:32 -0700 Subject: [PATCH] debug: fix ANSI styling disappearing from REPL when a session ends (#229753) Fixes #229752 --- .../contrib/debug/browser/debugExpressionRenderer.ts | 3 ++- src/vs/workbench/contrib/debug/browser/debugSession.ts | 2 ++ src/vs/workbench/contrib/debug/common/debug.ts | 4 +++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/vs/workbench/contrib/debug/browser/debugExpressionRenderer.ts b/src/vs/workbench/contrib/debug/browser/debugExpressionRenderer.ts index 38630cd47e5..7b52198a7bd 100644 --- a/src/vs/workbench/contrib/debug/browser/debugExpressionRenderer.ts +++ b/src/vs/workbench/contrib/debug/browser/debugExpressionRenderer.ts @@ -104,7 +104,8 @@ export class DebugExpressionRenderer { renderValue(container: HTMLElement, expressionOrValue: IExpressionValue | string, options: IRenderValueOptions = {}): IDisposable { const store = new DisposableStore(); - const supportsANSI = !!options.session?.capabilities.supportsANSIStyling; + // Use remembered capabilities so REPL elements can render even once a session ends + const supportsANSI = !!options.session?.rememberedCapabilities?.supportsANSIStyling; let value = typeof expressionOrValue === 'string' ? expressionOrValue : expressionOrValue.value; diff --git a/src/vs/workbench/contrib/debug/browser/debugSession.ts b/src/vs/workbench/contrib/debug/browser/debugSession.ts index 55085e77ea9..92b41d3e596 100644 --- a/src/vs/workbench/contrib/debug/browser/debugSession.ts +++ b/src/vs/workbench/contrib/debug/browser/debugSession.ts @@ -51,6 +51,7 @@ const TRIGGERED_BREAKPOINT_MAX_DELAY = 1500; export class DebugSession implements IDebugSession, IDisposable { parentSession: IDebugSession | undefined; + rememberedCapabilities?: DebugProtocol.Capabilities; private _subId: string | undefined; raw: RawDebugSession | undefined; // used in tests @@ -369,6 +370,7 @@ export class DebugSession implements IDebugSession, IDisposable { this.initialized = true; this._onDidChangeState.fire(); + this.rememberedCapabilities = this.raw.capabilities; this.debugService.setExceptionBreakpointsForSession(this, (this.raw && this.raw.capabilities.exceptionBreakpointFilters) || []); this.debugService.getModel().registerBreakpointModes(this.configuration.type, this.raw.capabilities.breakpointModes || []); } catch (err) { diff --git a/src/vs/workbench/contrib/debug/common/debug.ts b/src/vs/workbench/contrib/debug/common/debug.ts index b225f145056..65ecc46b857 100644 --- a/src/vs/workbench/contrib/debug/common/debug.ts +++ b/src/vs/workbench/contrib/debug/common/debug.ts @@ -412,8 +412,10 @@ export interface IDebugSession extends ITreeElement { readonly onDidChangeState: Event; readonly onDidChangeReplElements: Event; - // DA capabilities + /** DA capabilities. Set only when there is a running session available. */ readonly capabilities: DebugProtocol.Capabilities; + /** DA capabilities. These are retained on the session even after is implementation ends. */ + readonly rememberedCapabilities?: DebugProtocol.Capabilities; // DAP events