From 88f3b432bbe93474cc29e413b6a831050a056beb Mon Sep 17 00:00:00 2001 From: David Kutugata Date: Tue, 23 Jun 2020 16:29:30 -0700 Subject: [PATCH] Remove kernel change on the Interactive Window (#12439) * add 'select kernel' handle message on the interactive window * remove kernel toolbar from the interactive window if th user uses a local jupyter server * add setting to enable it back * add news file * oops * Add the experiment, as well as IExperimentService on everything that extends WebViewHost * removed setting * add setting back --- news/2 Fixes/11347.md | 2 ++ package.json | 6 ++++ src/client/common/experiments/groups.ts | 7 +++++ src/client/common/startPage/startPage.ts | 3 +- src/client/common/types.ts | 1 + .../datascience/data-viewing/dataViewer.ts | 3 +- .../interactive-common/interactiveBase.ts | 15 +++++++--- .../interactive-ipynb/nativeEditor.ts | 7 +++-- .../nativeEditorOldWebView.ts | 7 +++-- .../interactive-window/interactiveWindow.ts | 7 +++-- src/client/datascience/plotting/plotViewer.ts | 3 +- src/client/datascience/types.ts | 4 +++ src/client/datascience/webViewHost.ts | 6 +++- .../history-react/interactivePanel.tsx | 30 +++++++++++++++++-- .../interactive-common/kernelSelection.tsx | 4 +-- .../react-common/settingsReactSide.ts | 3 ++ 16 files changed, 89 insertions(+), 19 deletions(-) create mode 100644 news/2 Fixes/11347.md diff --git a/news/2 Fixes/11347.md b/news/2 Fixes/11347.md new file mode 100644 index 000000000000..00cf756ea3b7 --- /dev/null +++ b/news/2 Fixes/11347.md @@ -0,0 +1,2 @@ +Removed the Kernel Selection toolbar from the Interactive Window when using a local Jupyter Server. +To show it again, set the setting 'Python > Data Science > Show Kernel Selection On Interactive Window'. diff --git a/package.json b/package.json index b8cc3dba6a42..437bbe4d3731 100644 --- a/package.json +++ b/package.json @@ -1925,6 +1925,12 @@ "description": "Automatically scroll the interactive window to show the output of the last statement executed. If false, the interactive window will only automatically scroll if the bottom of the prior cell is visible.", "scope": "resource" }, + "python.dataScience.showKernelSelectionOnInteractiveWindow": { + "type": "boolean", + "default": false, + "description": "When set to true, enables the kernel selector in the Interactive Window. By default, the Interactive Window will use your Python Interpreters kernel.", + "scope": "resource" + }, "python.dataScience.enableScrollingForCellOutputs": { "type": "boolean", "default": true, diff --git a/src/client/common/experiments/groups.ts b/src/client/common/experiments/groups.ts index c86c4516462b..b0206720139a 100644 --- a/src/client/common/experiments/groups.ts +++ b/src/client/common/experiments/groups.ts @@ -87,3 +87,10 @@ export enum NotebookEditorSupport { export enum EnableStartPage { experiment = 'EnableStartPage' } + +// Experiment to remove the Kernel/Server Tooblar in the Interactive Window when running a local Jupyter Server. +// It doesn't make sense to have it there, the user can already change the kernel +// by changing the python interpreter on the status bar. +export enum RemoveKernelToolbarInInteractiveWindow { + experiment = 'RemoveKernelToolbarInInteractiveWindow' +} diff --git a/src/client/common/startPage/startPage.ts b/src/client/common/startPage/startPage.ts index 223b283b835a..b137e1446778 100644 --- a/src/client/common/startPage/startPage.ts +++ b/src/client/common/startPage/startPage.ts @@ -66,7 +66,8 @@ export class StartPage extends WebViewHost implements IStartP localize.StartPage.getStarted(), ViewColumn.One, false, - false + false, + Promise.resolve(false) ); this.timer = new StopWatch(); } diff --git a/src/client/common/types.ts b/src/client/common/types.ts index 01b073cf0a46..1d9e93eaee3e 100644 --- a/src/client/common/types.ts +++ b/src/client/common/types.ts @@ -399,6 +399,7 @@ export interface IDataScienceSettings { jupyterCommandLineArguments: string[]; widgetScriptSources: WidgetCDNs[]; alwaysScrollOnNewCell?: boolean; + showKernelSelectionOnInteractiveWindow?: boolean; } export type WidgetCDNs = 'unpkg.com' | 'jsdelivr.com'; diff --git a/src/client/datascience/data-viewing/dataViewer.ts b/src/client/datascience/data-viewing/dataViewer.ts index c048ad22e91e..67db7a6b9d55 100644 --- a/src/client/datascience/data-viewing/dataViewer.ts +++ b/src/client/datascience/data-viewing/dataViewer.ts @@ -58,7 +58,8 @@ export class DataViewer extends WebViewHost implements IData localize.DataScience.dataExplorerTitle(), ViewColumn.One, useCustomEditorApi, - false + false, + Promise.resolve(false) ); } diff --git a/src/client/datascience/interactive-common/interactiveBase.ts b/src/client/datascience/interactive-common/interactiveBase.ts index 9693afa47fff..3b8278e62a90 100644 --- a/src/client/datascience/interactive-common/interactiveBase.ts +++ b/src/client/datascience/interactive-common/interactiveBase.ts @@ -35,10 +35,15 @@ import { } from '../../common/application/types'; import { CancellationError } from '../../common/cancellation'; import { EXTENSION_ROOT_DIR, isTestExecution, PYTHON_LANGUAGE } from '../../common/constants'; -import { RunByLine } from '../../common/experiments/groups'; +import { RemoveKernelToolbarInInteractiveWindow, RunByLine } from '../../common/experiments/groups'; import { traceError, traceInfo, traceWarning } from '../../common/logger'; import { IFileSystem } from '../../common/platform/types'; -import { IConfigurationService, IDisposableRegistry, IExperimentsManager } from '../../common/types'; +import { + IConfigurationService, + IDisposableRegistry, + IExperimentService, + IExperimentsManager +} from '../../common/types'; import { createDeferred, Deferred } from '../../common/utils/async'; import * as localize from '../../common/utils/localize'; import { isUntitledFile, noop } from '../../common/utils/misc'; @@ -153,7 +158,8 @@ export abstract class InteractiveBase extends WebViewHost implements IPlot localize.DataScience.plotViewerTitle(), ViewColumn.One, useCustomEditorApi, - false + false, + Promise.resolve(false) ); // Load the web panel using our current directory as we don't expect to load any other files super.loadWebPanel(process.cwd()).catch(traceError); diff --git a/src/client/datascience/types.ts b/src/client/datascience/types.ts index 3b786b3d3a02..80808fb1b17d 100644 --- a/src/client/datascience/types.ts +++ b/src/client/datascience/types.ts @@ -764,6 +764,10 @@ export interface IDataScienceExtraSettings extends IDataScienceSettings { variableOptions: { enableDuringDebugger: boolean; }; + + webviewExperiments: { + removeKernelToolbarInInteractiveWindow: boolean; + }; } // Get variables from the currently running active Jupyter server diff --git a/src/client/datascience/webViewHost.ts b/src/client/datascience/webViewHost.ts index 430627ae74b4..ee3adb462539 100644 --- a/src/client/datascience/webViewHost.ts +++ b/src/client/datascience/webViewHost.ts @@ -51,7 +51,8 @@ export abstract class WebViewHost implements IDisposable { @unmanaged() private title: string, @unmanaged() private viewColumn: ViewColumn, @unmanaged() protected readonly useCustomEditorApi: boolean, - @unmanaged() private readonly enableVariablesDuringDebugging: boolean + @unmanaged() private readonly enableVariablesDuringDebugging: boolean, + @unmanaged() private readonly hideKernelToolbarInInteractiveWindow: Promise ) { // Create our message listener for our web panel. this.messageListener = messageListenerCtor( @@ -214,6 +215,9 @@ export abstract class WebViewHost implements IDisposable { }, variableOptions: { enableDuringDebugger: this.enableVariablesDuringDebugging + }, + webviewExperiments: { + removeKernelToolbarInInteractiveWindow: await this.hideKernelToolbarInInteractiveWindow } }; } diff --git a/src/datascience-ui/history-react/interactivePanel.tsx b/src/datascience-ui/history-react/interactivePanel.tsx index f71ac080514c..065d3b56be93 100644 --- a/src/datascience-ui/history-react/interactivePanel.tsx +++ b/src/datascience-ui/history-react/interactivePanel.tsx @@ -203,6 +203,20 @@ ${buildSettingsCss(this.props.settings)}`} /> + {this.renderKernelSelection()} + + + ); + } + + private renderKernelSelection() { + if ( + this.props.settings && + this.props.settings.webviewExperiments && + this.props.settings.webviewExperiments.removeKernelToolbarInInteractiveWindow + ) { + if (this.props.settings.showKernelSelectionOnInteractiveWindow) { + return ( selectServer={this.props.selectServer} selectKernel={this.props.selectKernel} /> - - + ); + } else if (this.props.kernel.localizedUri === getLocString('DataScience.localJupyterServer', 'local')) { + return; + } + } + + return ( + ); } diff --git a/src/datascience-ui/interactive-common/kernelSelection.tsx b/src/datascience-ui/interactive-common/kernelSelection.tsx index 6273dbfd0f32..245f35fd099b 100644 --- a/src/datascience-ui/interactive-common/kernelSelection.tsx +++ b/src/datascience-ui/interactive-common/kernelSelection.tsx @@ -85,9 +85,7 @@ export class KernelSelection extends React.Component { } private selectKernel() { - if (this.isKernelSelectionAllowed) { - this.props.selectKernel(); - } + this.props.selectKernel(); } private getIcon(): ImageName { return this.props.kernel.jupyterServerStatus === ServerStatus.NotStarted diff --git a/src/datascience-ui/react-common/settingsReactSide.ts b/src/datascience-ui/react-common/settingsReactSide.ts index 3edb5e6940a7..b644c2e9832c 100644 --- a/src/datascience-ui/react-common/settingsReactSide.ts +++ b/src/datascience-ui/react-common/settingsReactSide.ts @@ -68,6 +68,9 @@ export function getDefaultSettings() { variableOptions: { enableDuringDebugger: false }, + webviewExperiments: { + removeKernelToolbarInInteractiveWindow: false + }, runStartupCommands: '', debugJustMyCode: true, variableQueries: [],