Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions .eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -521,8 +521,6 @@ src/client/common/nuget/types.ts
src/client/common/nuget/nugetService.ts
src/client/common/cancellation.ts
src/client/common/interpreterPathService.ts
src/client/common/startPage/startPage.ts
src/client/common/startPage/types.ts
src/client/common/startPage/startPageMessageListener.ts
src/client/common/application/customEditorService.ts
src/client/common/application/commands.ts
Expand Down Expand Up @@ -629,7 +627,6 @@ src/client/application/serviceRegistry.ts
src/client/application/diagnostics/surceMapSupportService.ts
src/client/application/diagnostics/base.ts
src/client/application/diagnostics/applicationDiagnostics.ts
src/client/application/diagnostics/serviceRegistry.ts
src/client/application/diagnostics/filter.ts
src/client/application/diagnostics/promptHandler.ts
src/client/application/diagnostics/commands/base.ts
Expand Down Expand Up @@ -664,7 +661,6 @@ src/startPage-ui/react-common/logger.ts
src/startPage-ui/react-common/postOffice.ts
src/startPage-ui/startPage/index.tsx
src/startPage-ui/startPage/startPage.tsx
src/test/startPage/startPageIocContainer.ts
src/test/startPage/mockCommandManager.ts
src/test/startPage/mockDocument.ts
src/test/startPage/mockDocumentManager.ts
Expand Down
2 changes: 1 addition & 1 deletion src/client/application/diagnostics/serviceRegistry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ import {
} from './promptHandler';
import { IDiagnosticFilterService, IDiagnosticHandlerService, IDiagnosticsService } from './types';

export function registerTypes(serviceManager: IServiceManager, languageServerType: LanguageServerType) {
export function registerTypes(serviceManager: IServiceManager, languageServerType: LanguageServerType): void {
serviceManager.addSingleton<IDiagnosticFilterService>(IDiagnosticFilterService, DiagnosticFilterService);
serviceManager.addSingleton<IDiagnosticHandlerService<MessageCommandPrompt>>(
IDiagnosticHandlerService,
Expand Down
28 changes: 21 additions & 7 deletions src/client/common/startPage/startPage.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

'use strict';

import { inject, injectable } from 'inversify';
Expand Down Expand Up @@ -36,11 +37,17 @@ export const EXTENSION_VERSION_MEMENTO = 'extensionVersion';
export class StartPage extends WebviewPanelHost<IStartPageMapping>
implements IStartPage, IExtensionSingleActivationService {
protected closedEvent: EventEmitter<IStartPage> = new EventEmitter<IStartPage>();

private timer: StopWatch;

private actionTaken = false;

private actionTakenOnFirstTime = false;

private firstTime = false;

private webviewDidLoad = false;

public initialMementoValue: string | undefined = undefined;

constructor(
Expand Down Expand Up @@ -103,6 +110,7 @@ export class StartPage extends WebviewPanelHost<IStartPageMapping>
}, 3000);
}

// eslint-disable-next-line class-methods-use-this
public get owningResource(): Resource {
return undefined;
}
Expand All @@ -119,18 +127,19 @@ export class StartPage extends WebviewPanelHost<IStartPageMapping>
this.closedEvent.fire(this);
}

public async onMessage(message: string, payload: any) {
public async onMessage(message: string, payload: unknown): Promise<void> {
switch (message) {
case StartPageMessages.Started:
this.webviewDidLoad = true;
break;
case StartPageMessages.RequestShowAgainSetting:
case StartPageMessages.RequestShowAgainSetting: {
const settings = this.configuration.getSettings();
await this.postMessage(StartPageMessages.SendSetting, {
showAgainSetting: settings.showStartPage,
});
break;
case StartPageMessages.OpenBlankNotebook:
}
case StartPageMessages.OpenBlankNotebook: {
sendTelemetryEvent(Telemetry.StartPageOpenBlankNotebook);
this.setTelemetryFlags();

Expand All @@ -146,7 +155,8 @@ export class StartPage extends WebviewPanelHost<IStartPageMapping>
this.openSampleNotebook().ignoreErrors();
}
break;
case StartPageMessages.OpenBlankPythonFile:
}
case StartPageMessages.OpenBlankPythonFile: {
sendTelemetryEvent(Telemetry.StartPageOpenBlankPythonFile);
this.setTelemetryFlags();

Expand All @@ -156,7 +166,8 @@ export class StartPage extends WebviewPanelHost<IStartPageMapping>
});
await this.documentManager.showTextDocument(doc, 1, true);
break;
case StartPageMessages.OpenInteractiveWindow:
}
case StartPageMessages.OpenInteractiveWindow: {
sendTelemetryEvent(Telemetry.StartPageOpenInteractiveWindow);
this.setTelemetryFlags();

Expand All @@ -167,6 +178,7 @@ export class StartPage extends WebviewPanelHost<IStartPageMapping>
await this.documentManager.showTextDocument(doc2, 1, true);
await this.commandManager.executeCommand('jupyter.runallcells', Uri.parse(''));
break;
}
case StartPageMessages.OpenCommandPalette:
sendTelemetryEvent(Telemetry.StartPageOpenCommandPalette);
this.setTelemetryFlags();
Expand All @@ -185,7 +197,7 @@ export class StartPage extends WebviewPanelHost<IStartPageMapping>

this.openSampleNotebook().ignoreErrors();
break;
case StartPageMessages.OpenFileBrowser:
case StartPageMessages.OpenFileBrowser: {
sendTelemetryEvent(Telemetry.StartPageOpenFileBrowser);
this.setTelemetryFlags();

Expand All @@ -200,6 +212,7 @@ export class StartPage extends WebviewPanelHost<IStartPageMapping>
await this.documentManager.showTextDocument(doc3);
}
break;
}
case StartPageMessages.OpenFolder:
sendTelemetryEvent(Telemetry.StartPageOpenFolder);
this.setTelemetryFlags();
Expand All @@ -226,7 +239,7 @@ export class StartPage extends WebviewPanelHost<IStartPageMapping>
// Public for testing
public async extensionVersionChanged(): Promise<boolean> {
const savedVersion: string | undefined = this.context.globalState.get(EXTENSION_VERSION_MEMENTO);
const version: string = this.appEnvironment.packageJson.version;
const { version } = this.appEnvironment.packageJson;
let shouldShowStartPage: boolean;

if (savedVersion) {
Expand Down Expand Up @@ -263,6 +276,7 @@ export class StartPage extends WebviewPanelHost<IStartPageMapping>
}
}

// eslint-disable-next-line class-methods-use-this
private savedVersionisOlder(savedVersion: string, actualVersion: string): boolean {
const saved = savedVersion.split('.');
const actual = actualVersion.split('.');
Expand Down
40 changes: 26 additions & 14 deletions src/client/common/startPage/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,35 +19,47 @@ export interface ISettingPackage {
showAgainSetting: boolean;
}

export namespace StartPageMessages {
export const Started = 'started';
export const UpdateSettings = 'update_settings';
export const RequestShowAgainSetting = 'RequestShowAgainSetting';
export const SendSetting = 'SendSetting';
export const OpenBlankNotebook = 'OpenBlankNotebook';
export const OpenBlankPythonFile = 'OpenBlankPythonFile';
export const OpenInteractiveWindow = 'OpenInteractiveWindow';
export const OpenCommandPalette = 'OpenCommandPalette';
export const OpenCommandPaletteWithOpenNBSelected = 'OpenCommandPaletteWithOpenNBSelected';
export const OpenSampleNotebook = 'OpenSampleNotebook';
export const OpenFileBrowser = 'OpenFileBrowser';
export const OpenFolder = 'OpenFolder';
export const OpenWorkspace = 'OpenWorkspace';
export enum StartPageMessages {
Started = 'started',
UpdateSettings = 'update_settings',
RequestShowAgainSetting = 'RequestShowAgainSetting',
SendSetting = 'SendSetting',
OpenBlankNotebook = 'OpenBlankNotebook',
OpenBlankPythonFile = 'OpenBlankPythonFile',
OpenInteractiveWindow = 'OpenInteractiveWindow',
OpenCommandPalette = 'OpenCommandPalette',
OpenCommandPaletteWithOpenNBSelected = 'OpenCommandPaletteWithOpenNBSelected',
OpenSampleNotebook = 'OpenSampleNotebook',
OpenFileBrowser = 'OpenFileBrowser',
OpenFolder = 'OpenFolder',
OpenWorkspace = 'OpenWorkspace',
}

export class IStartPageMapping {
public [StartPageMessages.RequestShowAgainSetting]: ISettingPackage;

public [StartPageMessages.SendSetting]: ISettingPackage;

public [StartPageMessages.Started]: never | undefined;

public [StartPageMessages.UpdateSettings]: boolean;

public [StartPageMessages.OpenBlankNotebook]: never | undefined;

public [StartPageMessages.OpenBlankPythonFile]: never | undefined;

public [StartPageMessages.OpenInteractiveWindow]: never | undefined;

public [StartPageMessages.OpenCommandPalette]: never | undefined;

public [StartPageMessages.OpenCommandPaletteWithOpenNBSelected]: never | undefined;

public [StartPageMessages.OpenSampleNotebook]: never | undefined;

public [StartPageMessages.OpenFileBrowser]: never | undefined;

public [StartPageMessages.OpenFolder]: never | undefined;

public [StartPageMessages.OpenWorkspace]: never | undefined;
}

Expand Down
40 changes: 32 additions & 8 deletions src/test/startPage/startPageIocContainer.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.

/* eslint-disable max-classes-per-file */

// eslint-disable-next-line camelcase
import * as child_process from 'child_process';
import { ReactWrapper } from 'enzyme';
import * as fs from 'fs-extra';
Expand Down Expand Up @@ -95,7 +98,7 @@ export class StartPageIocContainer extends UnitTestIocContainer {

private webPanelProvider = mock(WebviewPanelProvider);

private settingsMap = new Map<string, any>();
private settingsMap = new Map<string, unknown>();

private experimentState = new Map<string, boolean>();

Expand Down Expand Up @@ -161,6 +164,7 @@ export class StartPageIocContainer extends UnitTestIocContainer {
if (!this.uiTest) {
// Blur window focus so we don't have editors polling

// eslint-disable-next-line global-require
const reactHelpers = require('./reactHelpers') as typeof import('./reactHelpers');
reactHelpers.blurWindow();
}
Expand All @@ -179,7 +183,7 @@ export class StartPageIocContainer extends UnitTestIocContainer {
EnvironmentActivationServiceCache.forceUseNormal();
}

public registerStartPageTypes() {
public registerStartPageTypes(): void {
this.defaultPythonPath = this.findPythonPath();

this.serviceManager.addSingletonInstance<StartPageIocContainer>(StartPageIocContainer, this);
Expand All @@ -193,6 +197,7 @@ export class StartPageIocContainer extends UnitTestIocContainer {
// Create the workspace service first as it's used to set config values.
this.createWorkspaceService();

// eslint-disable-next-line global-require
const reactHelpers = require('./reactHelpers') as typeof import('./reactHelpers');
reactHelpers.setUpDomEnvironment();

Expand Down Expand Up @@ -269,7 +274,10 @@ export class StartPageIocContainer extends UnitTestIocContainer {
});
}

public createWebView(mount: () => ReactWrapper<any, Readonly<{}>, React.Component>, id: string) {
public createWebView(
mount: () => ReactWrapper<unknown, Readonly<unknown>, React.Component>,
id: string,
): IMountedWebView {
// We need to mount the react control before we even create an interactive window object. Otherwise the mount will miss rendering some parts
this.pendingWebPanel = this.get<IMountedWebViewFactory>(IMountedWebViewFactory).create(id, mount);
return this.pendingWebPanel;
Expand All @@ -294,7 +302,7 @@ export class StartPageIocContainer extends UnitTestIocContainer {
} else if (this.disposed) {
setting = this.generatePythonSettings(this.languageServerType);
}
return setting;
return setting as IPythonSettings;
}

public getWorkspaceConfig(section: string | undefined, resource?: Resource): MockWorkspaceConfiguration {
Expand All @@ -310,7 +318,7 @@ export class StartPageIocContainer extends UnitTestIocContainer {
return result;
}

public addWorkspaceFolder(folderPath: string) {
public addWorkspaceFolder(folderPath: string): MockWorkspaceFolder {
const workspaceFolder = new MockWorkspaceFolder(folderPath, this.workspaceFolders.length);
this.workspaceFolders.push(workspaceFolder);
return workspaceFolder;
Expand All @@ -333,15 +341,30 @@ export class StartPageIocContainer extends UnitTestIocContainer {

public ignoreDeleteEvents = false;

public onDidChange(_listener: (e: Uri) => any, _thisArgs?: any, _disposables?: Disposable[]): Disposable {
// eslint-disable-next-line class-methods-use-this
public onDidChange(
_listener: (e: Uri) => unknown,
_thisArgs?: unknown,
_disposables?: Disposable[],
): Disposable {
return { dispose: noop };
}

public onDidDelete(_listener: (e: Uri) => any, _thisArgs?: any, _disposables?: Disposable[]): Disposable {
// eslint-disable-next-line class-methods-use-this
public onDidDelete(
_listener: (e: Uri) => unknown,
_thisArgs?: unknown,
_disposables?: Disposable[],
): Disposable {
return { dispose: noop };
}

public onDidCreate(_listener: (e: Uri) => any, _thisArgs?: any, _disposables?: Disposable[]): Disposable {
// eslint-disable-next-line class-methods-use-this
public onDidCreate(
_listener: (e: Uri) => unknown,
_thisArgs?: unknown,
_disposables?: Disposable[],
): Disposable {
return { dispose: noop };
}

Expand Down Expand Up @@ -413,6 +436,7 @@ export class StartPageIocContainer extends UnitTestIocContainer {
return undefined;
}

// eslint-disable-next-line class-methods-use-this
private findPythonPath(): string {
try {
// Use a static variable so we don't have to recompute this on subsequenttests
Expand Down