From 8b355f85671239bfe11bea7f4c3cb6683c041a34 Mon Sep 17 00:00:00 2001 From: Sam Clark Date: Tue, 21 Jan 2025 21:27:15 -0600 Subject: [PATCH 1/5] Adds indicator in console when extension host is disconnected --- .../browser/components/consoleInstance.css | 7 +++ .../components/consoleInstanceItems.tsx | 53 +++++++++++++------ 2 files changed, 45 insertions(+), 15 deletions(-) diff --git a/src/vs/workbench/contrib/positronConsole/browser/components/consoleInstance.css b/src/vs/workbench/contrib/positronConsole/browser/components/consoleInstance.css index 0de791fc950..71b663a1742 100644 --- a/src/vs/workbench/contrib/positronConsole/browser/components/consoleInstance.css +++ b/src/vs/workbench/contrib/positronConsole/browser/components/consoleInstance.css @@ -57,3 +57,10 @@ .console-core .console-instance:focus { outline: none !important; } + +.console-core .console-instance .console-instance-container .console-item-reconnecting { + display: flex; + flex-direction: row; + justify-items: center; + gap: 0.25rem; +} diff --git a/src/vs/workbench/contrib/positronConsole/browser/components/consoleInstanceItems.tsx b/src/vs/workbench/contrib/positronConsole/browser/components/consoleInstanceItems.tsx index 65cbd508bbd..22db1f11aba 100644 --- a/src/vs/workbench/contrib/positronConsole/browser/components/consoleInstanceItems.tsx +++ b/src/vs/workbench/contrib/positronConsole/browser/components/consoleInstanceItems.tsx @@ -14,7 +14,6 @@ import React, { Component } from 'react'; import { FontInfo } from '../../../../../editor/common/config/fontInfo.js'; import { ConsoleInput } from './consoleInput.js'; import { RuntimeTrace } from './runtimeTrace.js'; -import { RuntimeExited } from './runtimeExited.js'; import { RuntimeStartup } from './runtimeStartup.js'; import { RuntimeStarted } from './runtimeStarted.js'; import { RuntimeOffline } from './runtimeOffline.js'; @@ -25,7 +24,6 @@ import { RuntimeItemExited } from '../../../../services/positronConsole/browser/ import { RuntimeItemStartup } from '../../../../services/positronConsole/browser/classes/runtimeItemStartup.js'; import { RuntimeItemStarted } from '../../../../services/positronConsole/browser/classes/runtimeItemStarted.js'; import { RuntimeItemOffline } from '../../../../services/positronConsole/browser/classes/runtimeItemOffline.js'; -import { RuntimeReconnected } from './runtimeReconnected.js'; import { RuntimeItemStarting } from '../../../../services/positronConsole/browser/classes/runtimeItemStarting.js'; import { RuntimeItemActivity } from '../../../../services/positronConsole/browser/classes/runtimeItemActivity.js'; import { RuntimePendingInput } from './runtimePendingInput.js'; @@ -65,6 +63,41 @@ export class ConsoleInstanceItems extends Component { * @returns The rendered component. */ override render() { + + let extensionHostDisconnected = false; + + const reversedItems = this.props.positronConsoleInstance.runtimeItems.slice().reverse(); + for (const item of reversedItems) { + if (item instanceof RuntimeItemStartup) { + break; + } else if (item instanceof RuntimeItemExited) { + extensionHostDisconnected = true; + break; + } + + } + + let promptComponent = null; + + if (extensionHostDisconnected) { + promptComponent = ( +
+ + Extensions restarting... +
+ ) + } else if (!this.props.positronConsoleInstance.promptActive && this.props.runtimeAttached) { + promptComponent = ( + // Update the component to eliminate flickering. + flushSync(() => this.forceUpdate() + )} + />); + } + return ( <>
@@ -76,7 +109,7 @@ export class ConsoleInstanceItems extends Component { } else if (runtimeItem instanceof RuntimeItemStartup) { return ; } else if (runtimeItem instanceof RuntimeItemReconnected) { - return ; + return null; } else if (runtimeItem instanceof RuntimeItemStarting) { return ; } else if (runtimeItem instanceof RuntimeItemStarted) { @@ -84,7 +117,7 @@ export class ConsoleInstanceItems extends Component { } else if (runtimeItem instanceof RuntimeItemOffline) { return ; } else if (runtimeItem instanceof RuntimeItemExited) { - return ; + return null; } else if (runtimeItem instanceof RuntimeItemRestartButton) { return ; } else if (runtimeItem instanceof RuntimeItemStartupFailure) { @@ -96,17 +129,7 @@ export class ConsoleInstanceItems extends Component { return null; } })} - {!this.props.positronConsoleInstance.promptActive && this.props.runtimeAttached && - - // Update the component to eliminate flickering. - flushSync(() => this.forceUpdate() - )} - /> - } + {promptComponent} ); } From f6bcae0e97cfa57833f900935a61fee6ddbcb553 Mon Sep 17 00:00:00 2001 From: Sam Clark Date: Thu, 23 Jan 2025 09:06:40 -0600 Subject: [PATCH 2/5] Adds logic to save prompt input during extension host restarts Also fixes ext. host indicator showing during unrelated disconnections --- .../browser/components/consoleInput.css | 6 +++ .../browser/components/consoleInput.tsx | 3 +- .../components/consoleInstanceItems.tsx | 42 +++++++++---------- 3 files changed, 27 insertions(+), 24 deletions(-) diff --git a/src/vs/workbench/contrib/positronConsole/browser/components/consoleInput.css b/src/vs/workbench/contrib/positronConsole/browser/components/consoleInput.css index 80a367c4907..4cc65942046 100644 --- a/src/vs/workbench/contrib/positronConsole/browser/components/consoleInput.css +++ b/src/vs/workbench/contrib/positronConsole/browser/components/consoleInput.css @@ -8,3 +8,9 @@ padding-bottom: 10px; position: relative; } + + +.console-input.hidden { + display: none; + background-color: red; +} diff --git a/src/vs/workbench/contrib/positronConsole/browser/components/consoleInput.tsx b/src/vs/workbench/contrib/positronConsole/browser/components/consoleInput.tsx index 7272c42d15a..6c5ab5d36a9 100644 --- a/src/vs/workbench/contrib/positronConsole/browser/components/consoleInput.tsx +++ b/src/vs/workbench/contrib/positronConsole/browser/components/consoleInput.tsx @@ -59,6 +59,7 @@ type ILineNumbersOptions = Pick void; readonly onCodeExecuted: () => void; @@ -960,7 +961,7 @@ export const ConsoleInput = (props: ConsoleInputProps) => { // Render. return ( -
+
{historyBrowserActive && { for (const item of reversedItems) { if (item instanceof RuntimeItemStartup) { break; - } else if (item instanceof RuntimeItemExited) { + } else if (item instanceof RuntimeItemExited && item.reason == "extensionHost") { extensionHostDisconnected = true; break; } } - let promptComponent = null; - - if (extensionHostDisconnected) { - promptComponent = ( -
- - Extensions restarting... -
- ) - } else if (!this.props.positronConsoleInstance.promptActive && this.props.runtimeAttached) { - promptComponent = ( - // Update the component to eliminate flickering. - flushSync(() => this.forceUpdate() - )} - />); - } - return ( <>
@@ -129,7 +108,24 @@ export class ConsoleInstanceItems extends Component { return null; } })} - {promptComponent} + {extensionHostDisconnected ? + (
+ + Extensions restarting... +
) : + null + } + +