Skip to content

Commit

Permalink
Fix linter issues (#39)
Browse files Browse the repository at this point in the history
  • Loading branch information
DonJayamanne committed Sep 15, 2020
1 parent 5e8aa11 commit dc4f4d0
Show file tree
Hide file tree
Showing 10 changed files with 127 additions and 129 deletions.
1 change: 0 additions & 1 deletion src/client/activation/jedi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,6 @@ export class JediExtensionActivator implements ILanguageServerActivator {
this.objectDefinitionProvider = new PythonObjectDefinitionProvider(jediFactory);
this.symbolProvider = new JediSymbolProvider(serviceContainer, jediFactory);
this.signatureProvider = new PythonSignatureProvider(jediFactory);

}

public deactivate() {
Expand Down
31 changes: 18 additions & 13 deletions src/client/activation/migrateDataScienceSettingsService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,31 +3,45 @@

'use strict';

import * as path from 'path';
import { inject, injectable } from 'inversify';
import * as path from 'path';
import { IApplicationEnvironment, IWorkspaceService } from '../common/application/types';
import { traceError } from '../common/logger';
import { Resource } from '../common/types';
import { swallowExceptions } from '../common/utils/decorators';
import { IDataScienceFileSystem } from '../datascience/types';
import { traceDecorators } from '../logging';
import { IExtensionActivationService } from './types';
import { IDataScienceFileSystem } from '../datascience/types';

@injectable()
export class MigrateDataScienceSettingsService implements IExtensionActivationService {
constructor(
@inject(IDataScienceFileSystem) private readonly fs: IDataScienceFileSystem,
@inject(IApplicationEnvironment) private readonly application: IApplicationEnvironment,
@inject(IWorkspaceService) private readonly workspace: IWorkspaceService
) { }
) {}

public async activate(resource: Resource): Promise<void> {
this.updateSettings(resource).ignoreErrors();
}

@swallowExceptions('Failed to update settings.json')
public async fixSettingInFile(filePath: string): Promise<string> {
let fileContents = await this.fs.readLocalFile(filePath);
fileContents = fileContents.replace(
/"python\.dataScience\.(.*?)":/g,
(_match, capture) => `"jupyter.${capture}":`
);
await this.fs.writeLocalFile(filePath, fileContents);
return fileContents;
}

@traceDecorators.error('Failed to update test settings')
private async updateSettings(resource: Resource): Promise<void> {
const filesToBeFixed = await this.getFilesToBeFixed(resource);
await Promise.all(filesToBeFixed.map((file) => this.fixSettingInFile(file)));
}

private getSettingsFiles(resource: Resource): string[] {
const settingsFiles: string[] = [];
if (this.application.userSettingsFile) {
Expand All @@ -39,6 +53,7 @@ export class MigrateDataScienceSettingsService implements IExtensionActivationSe
}
return settingsFiles;
}

private async getFilesToBeFixed(resource: Resource): Promise<string[]> {
const files = this.getSettingsFiles(resource);
const result = await Promise.all(
Expand All @@ -49,16 +64,6 @@ export class MigrateDataScienceSettingsService implements IExtensionActivationSe
);
return result.filter((item) => item.needsFixing).map((item) => item.file);
}
@swallowExceptions('Failed to update settings.json')
public async fixSettingInFile(filePath: string): Promise<string> {
let fileContents = await this.fs.readLocalFile(filePath);
fileContents = fileContents.replace(
/"python\.dataScience\.(.*?)":/g,
(_match, capture) => `"jupyter.${capture}":`
);
await this.fs.writeLocalFile(filePath, fileContents);
return fileContents;
}

private async doesFileNeedToBeFixed(filePath: string): Promise<boolean> {
try {
Expand Down
7 changes: 5 additions & 2 deletions src/client/activation/serviceRegistry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import { DotNetLanguageServerProxy } from './languageServer/languageServerProxy'
import { DotNetLanguageServerManager } from './languageServer/manager';
import { LanguageServerOutputChannel } from './languageServer/outputChannel';
import { PlatformData } from './languageServer/platformData';
import { MigrateDataScienceSettingsService } from './migrateDataScienceSettingsService';
import { NodeLanguageServerActivator } from './node/activator';
import { NodeLanguageServerAnalysisOptions } from './node/analysisOptions';
import { NodeLanguageClientFactory } from './node/languageClientFactory';
Expand Down Expand Up @@ -74,15 +75,17 @@ import {
IPlatformData,
LanguageServerType
} from './types';
import { MigrateDataScienceSettingsService } from './migrateDataScienceSettingsService';

// tslint:disable-next-line: max-func-body-length
export function registerTypes(serviceManager: IServiceManager, languageServerType: LanguageServerType) {
serviceManager.addSingleton<ILanguageServerCache>(ILanguageServerCache, LanguageServerExtensionActivationService);
serviceManager.addBinding(ILanguageServerCache, IExtensionActivationService);
serviceManager.addSingleton<ILanguageServerExtension>(ILanguageServerExtension, LanguageServerExtension);
serviceManager.add<IExtensionActivationManager>(IExtensionActivationManager, ExtensionActivationManager);
serviceManager.addSingleton<IExtensionActivationService>(IExtensionActivationService, MigrateDataScienceSettingsService);
serviceManager.addSingleton<IExtensionActivationService>(
IExtensionActivationService,
MigrateDataScienceSettingsService
);

serviceManager.addSingleton<IPythonExtensionBanner>(
IPythonExtensionBanner,
Expand Down
9 changes: 4 additions & 5 deletions src/client/common/installer/productInstaller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,12 +69,11 @@ export abstract class BaseInstaller {
}

public async install(
_product: Product,
_resource?: InterpreterUri,
_cancel?: CancellationToken
product: Product,
resource?: InterpreterUri,
cancel?: CancellationToken
): Promise<InstallerResponse> {
// TODO:
return InstallerResponse.Ignore;
return this.serviceContainer.get<IPythonInstaller>(IPythonInstaller).install(product, resource, cancel);
}

public async isInstalled(product: Product, resource?: InterpreterUri): Promise<boolean | undefined> {
Expand Down
5 changes: 1 addition & 4 deletions src/client/datascience/jupyter/kernels/kernelService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,7 @@ const NamedRegexp = require('named-js-regexp') as typeof import('named-js-regexp
*/
function isInterpreter(item: nbformat.IKernelspecMetadata | PythonEnvironment): item is PythonEnvironment {
// Interpreters will not have a `display_name` property, but have `path` and `type` properties.
return (
!!(item as PythonEnvironment).path &&
!(item as nbformat.IKernelspecMetadata).display_name
);
return !!(item as PythonEnvironment).path && !(item as nbformat.IKernelspecMetadata).display_name;
}

/**
Expand Down
4 changes: 0 additions & 4 deletions src/client/extensionActivation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ import { PythonCodeActionProvider } from './providers/codeActionProvider/pythonC
import { PythonFormattingEditProvider } from './providers/formatProvider';
import { registerTypes as providersRegisterTypes } from './providers/serviceRegistry';
import { activateSimplePythonRefactorProvider } from './providers/simpleRefactorProvider';
import { ISortImportsEditingProvider } from './providers/types';
import { setExtensionInstallTelemetryProperties } from './telemetry/extensionInstallTelemetry';
import { registerTypes as commonRegisterTerminalTypes } from './terminals/serviceRegistry';

Expand Down Expand Up @@ -147,9 +146,6 @@ async function activateLegacy(

activateSimplePythonRefactorProvider(serviceContainer);

const sortImports = serviceContainer.get<ISortImportsEditingProvider>(ISortImportsEditingProvider);
sortImports.registerCommands();

// Activate data science features
const dataScience = serviceManager.get<IDataScience>(IDataScience);
dataScience.activate().ignoreErrors();
Expand Down
2 changes: 0 additions & 2 deletions src/client/providers/importSortProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,6 @@ export class SortImportsEditingProvider implements ISortImportsEditingProvider {
: undefined;
}

public registerCommands() {}

public async sortImports(uri?: Uri): Promise<void> {
if (!uri) {
const activeEditor = this.documentManager.activeTextEditor;
Expand Down
1 change: 0 additions & 1 deletion src/client/providers/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,4 @@ export const ISortImportsEditingProvider = Symbol('ISortImportsEditingProvider')
export interface ISortImportsEditingProvider {
provideDocumentSortImportsEdits(uri: Uri, token?: CancellationToken): Promise<WorkspaceEdit | undefined>;
sortImports(uri?: Uri): Promise<void>;
registerCommands(): void;
}
2 changes: 2 additions & 0 deletions src/test/common/process/pythonExecutionFactory.unit.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ suite('Process - PythonExecutionFactory', () => {
setup(() => {
bufferDecoder = mock(BufferDecoder);
processFactory = mock(ProcessServiceFactory);
activationHelper = mock<IEnvironmentActivationService>();
windowsStoreInterpreter = mock<IWindowsStoreInterpreter>();
configService = mock(ConfigurationService);
processLogger = mock(ProcessLogger);
platformService = mock<IPlatformService>();
Expand Down
194 changes: 97 additions & 97 deletions src/test/datascience/errorHandler.unit.test.ts
Original file line number Diff line number Diff line change
@@ -1,111 +1,111 @@
// // Copyright (c) Microsoft Corporation. All rights reserved.
// // Licensed under the MIT License.
// 'use strict';
// import { anything, instance, mock, verify, when } from 'ts-mockito';
// import * as typemoq from 'typemoq';
// import { IApplicationShell } from '../../client/common/application/types';
// import * as localize from '../../client/common/utils/localize';
// import { DataScienceErrorHandler } from '../../client/datascience/errorHandler/errorHandler';
// import { JupyterInstallError } from '../../client/datascience/jupyter/jupyterInstallError';
// import { JupyterSelfCertsError } from '../../client/datascience/jupyter/jupyterSelfCertsError';
// import { JupyterZMQBinariesNotFoundError } from '../../client/datascience/jupyter/jupyterZMQBinariesNotFoundError';
// import { JupyterServerSelector } from '../../client/datascience/jupyter/serverSelector';
// import { IJupyterInterpreterDependencyManager } from '../../client/datascience/types';
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
'use strict';
import { anything, instance, mock, verify, when } from 'ts-mockito';
import * as typemoq from 'typemoq';
import { IApplicationShell } from '../../client/common/application/types';
import * as localize from '../../client/common/utils/localize';
import { DataScienceErrorHandler } from '../../client/datascience/errorHandler/errorHandler';
import { JupyterInstallError } from '../../client/datascience/jupyter/jupyterInstallError';
import { JupyterSelfCertsError } from '../../client/datascience/jupyter/jupyterSelfCertsError';
import { JupyterZMQBinariesNotFoundError } from '../../client/datascience/jupyter/jupyterZMQBinariesNotFoundError';
import { JupyterServerSelector } from '../../client/datascience/jupyter/serverSelector';
import { IJupyterInterpreterDependencyManager } from '../../client/datascience/types';

// suite('DataScience Error Handler Unit Tests', () => {
// let applicationShell: typemoq.IMock<IApplicationShell>;
// let dataScienceErrorHandler: DataScienceErrorHandler;
// let dependencyManager: IJupyterInterpreterDependencyManager;
// const serverSelector = mock(JupyterServerSelector);
suite('DataScience Error Handler Unit Tests', () => {
let applicationShell: typemoq.IMock<IApplicationShell>;
let dataScienceErrorHandler: DataScienceErrorHandler;
let dependencyManager: IJupyterInterpreterDependencyManager;
const serverSelector = mock(JupyterServerSelector);

// setup(() => {
// applicationShell = typemoq.Mock.ofType<IApplicationShell>();
// dependencyManager = mock<IJupyterInterpreterDependencyManager>();
// when(dependencyManager.installMissingDependencies(anything())).thenResolve();
// dataScienceErrorHandler = new DataScienceErrorHandler(
// applicationShell.object,
// instance(dependencyManager),
// instance(serverSelector)
// );
// });
// const message = 'Test error message.';
setup(() => {
applicationShell = typemoq.Mock.ofType<IApplicationShell>();
dependencyManager = mock<IJupyterInterpreterDependencyManager>();
when(dependencyManager.installMissingDependencies(anything())).thenResolve();
dataScienceErrorHandler = new DataScienceErrorHandler(
applicationShell.object,
instance(dependencyManager),
instance(serverSelector)
);
});
const message = 'Test error message.';

// test('Default error', async () => {
// applicationShell
// .setup((app) => app.showErrorMessage(typemoq.It.isAny()))
// .returns(() => Promise.resolve(message))
// .verifiable(typemoq.Times.once());
test('Default error', async () => {
applicationShell
.setup((app) => app.showErrorMessage(typemoq.It.isAny()))
.returns(() => Promise.resolve(message))
.verifiable(typemoq.Times.once());

// const err = new Error(message);
// await dataScienceErrorHandler.handleError(err);
const err = new Error(message);
await dataScienceErrorHandler.handleError(err);

// applicationShell.verifyAll();
// });
applicationShell.verifyAll();
});

// test('Jupyter Self Certificates Error', async () => {
// applicationShell
// .setup((app) => app.showErrorMessage(typemoq.It.isAny()))
// .returns(() => Promise.resolve(message))
// .verifiable(typemoq.Times.never());
test('Jupyter Self Certificates Error', async () => {
applicationShell
.setup((app) => app.showErrorMessage(typemoq.It.isAny()))
.returns(() => Promise.resolve(message))
.verifiable(typemoq.Times.never());

// const err = new JupyterSelfCertsError(message);
// await dataScienceErrorHandler.handleError(err);
const err = new JupyterSelfCertsError(message);
await dataScienceErrorHandler.handleError(err);

// applicationShell.verifyAll();
// });
applicationShell.verifyAll();
});

// test('Jupyter Install Error', async () => {
// applicationShell
// .setup((app) =>
// app.showInformationMessage(
// typemoq.It.isAny(),
// typemoq.It.isValue(localize.DataScience.jupyterInstall()),
// typemoq.It.isValue(localize.DataScience.notebookCheckForImportNo()),
// typemoq.It.isAny()
// )
// )
// .returns(() => Promise.resolve(localize.DataScience.jupyterInstall()))
// .verifiable(typemoq.Times.once());
test('Jupyter Install Error', async () => {
applicationShell
.setup((app) =>
app.showInformationMessage(
typemoq.It.isAny(),
typemoq.It.isValue(localize.DataScience.jupyterInstall()),
typemoq.It.isValue(localize.DataScience.notebookCheckForImportNo()),
typemoq.It.isAny()
)
)
.returns(() => Promise.resolve(localize.DataScience.jupyterInstall()))
.verifiable(typemoq.Times.once());

// const installers: IModuleInstaller[] = [
// {
// name: 'Pip',
// displayName: 'Pip',
// priority: 0,
// isSupported: () => Promise.resolve(true),
// installModule: () => Promise.resolve()
// },
// {
// name: 'Conda',
// displayName: 'Conda',
// priority: 0,
// isSupported: () => Promise.resolve(true),
// installModule: () => Promise.resolve()
// }
// ];
// const installers: IModuleInstaller[] = [
// {
// name: 'Pip',
// displayName: 'Pip',
// priority: 0,
// isSupported: () => Promise.resolve(true),
// installModule: () => Promise.resolve()
// },
// {
// name: 'Conda',
// displayName: 'Conda',
// priority: 0,
// isSupported: () => Promise.resolve(true),
// installModule: () => Promise.resolve()
// }
// ];

// channels
// .setup((ch) => ch.getInstallationChannels())
// .returns(() => Promise.resolve(installers))
// .verifiable(typemoq.Times.once());
// channels
// .setup((ch) => ch.getInstallationChannels())
// .returns(() => Promise.resolve(installers))
// .verifiable(typemoq.Times.once());

// const err = new JupyterInstallError(message, 'test.com');
// await dataScienceErrorHandler.handleError(err);
const err = new JupyterInstallError(message, 'test.com');
await dataScienceErrorHandler.handleError(err);

// verify(dependencyManager.installMissingDependencies(err)).once();
// });
verify(dependencyManager.installMissingDependencies(err)).once();
});

// test('ZMQ Install Error', async () => {
// applicationShell
// .setup((app) =>
// app.showErrorMessage(typemoq.It.isAny(), typemoq.It.isValue(localize.DataScience.selectNewServer()))
// )
// .returns(() => Promise.resolve(localize.DataScience.selectNewServer()))
// .verifiable(typemoq.Times.once());
// when(serverSelector.selectJupyterURI(anything())).thenCall(() => Promise.resolve());
// const err = new JupyterZMQBinariesNotFoundError('Not found');
// await dataScienceErrorHandler.handleError(err);
// verify(serverSelector.selectJupyterURI(anything())).once();
// applicationShell.verifyAll();
// });
// });
test('ZMQ Install Error', async () => {
applicationShell
.setup((app) =>
app.showErrorMessage(typemoq.It.isAny(), typemoq.It.isValue(localize.DataScience.selectNewServer()))
)
.returns(() => Promise.resolve(localize.DataScience.selectNewServer()))
.verifiable(typemoq.Times.once());
when(serverSelector.selectJupyterURI(anything())).thenCall(() => Promise.resolve());
const err = new JupyterZMQBinariesNotFoundError('Not found');
await dataScienceErrorHandler.handleError(err);
verify(serverSelector.selectJupyterURI(anything())).once();
applicationShell.verifyAll();
});
});

0 comments on commit dc4f4d0

Please sign in to comment.