diff --git a/extensions/data-workspace/.eslintrc.json b/extensions/data-workspace/.eslintrc.json new file mode 100644 index 0000000000..2570d1e18a --- /dev/null +++ b/extensions/data-workspace/.eslintrc.json @@ -0,0 +1,13 @@ +{ + "parserOptions": { + "project": "./extensions/data-workspace/tsconfig.json" + }, + "rules": { + "@typescript-eslint/no-floating-promises": [ + "error", + { + "ignoreVoid": true + } + ] + } +} diff --git a/extensions/data-workspace/src/common/dataWorkspaceExtension.ts b/extensions/data-workspace/src/common/dataWorkspaceExtension.ts index ba9e0af343..8e3a20e9e1 100644 --- a/extensions/data-workspace/src/common/dataWorkspaceExtension.ts +++ b/extensions/data-workspace/src/common/dataWorkspaceExtension.ts @@ -22,7 +22,7 @@ export class DataWorkspaceExtension implements IExtension { } showProjectsView(): void { - vscode.commands.executeCommand('dataworkspace.views.main.focus'); + void vscode.commands.executeCommand('dataworkspace.views.main.focus'); } get defaultProjectSaveLocation(): vscode.Uri | undefined { diff --git a/extensions/data-workspace/src/common/workspaceTreeDataProvider.ts b/extensions/data-workspace/src/common/workspaceTreeDataProvider.ts index 7d3f09930a..497c310f21 100644 --- a/extensions/data-workspace/src/common/workspaceTreeDataProvider.ts +++ b/extensions/data-workspace/src/common/workspaceTreeDataProvider.ts @@ -16,7 +16,7 @@ import { TelemetryReporter } from './telemetry'; export class WorkspaceTreeDataProvider implements vscode.TreeDataProvider{ constructor(private _workspaceService: IWorkspaceService) { this._workspaceService.onDidWorkspaceProjectsChange(() => { - this.refresh(); + return this.refresh(); }); } @@ -77,7 +77,7 @@ export class WorkspaceTreeDataProvider implements vscode.TreeDataProvider 0) { - vscode.window.showErrorMessage(ProjectsFailedToLoad); + void vscode.window.showErrorMessage(ProjectsFailedToLoad); } TelemetryReporter.sendMetricsEvent(typeMetric, 'OpenWorkspaceProjectTypes'); @@ -89,7 +89,7 @@ export class WorkspaceTreeDataProvider implements vscode.TreeDataProvider 0) { - vscode.window.showErrorMessage(UnknownProjectsError(unknownProjects)); + void vscode.window.showErrorMessage(UnknownProjectsError(unknownProjects)); } return treeItems; diff --git a/extensions/data-workspace/src/dialogs/newProjectDialog.ts b/extensions/data-workspace/src/dialogs/newProjectDialog.ts index 98857083aa..70ee804ebe 100644 --- a/extensions/data-workspace/src/dialogs/newProjectDialog.ts +++ b/extensions/data-workspace/src/dialogs/newProjectDialog.ts @@ -96,7 +96,7 @@ export class NewProjectDialog extends DialogBase { .withAdditionalProperties({ projectFileExtension: this.model.projectFileExtension, projectTemplateId: this.model.projectTypeId, error: err?.message ? err.message : err }) .send(); - vscode.window.showErrorMessage(err?.message ? err.message : err); + void vscode.window.showErrorMessage(err?.message ? err.message : err); } } @@ -163,7 +163,7 @@ export class NewProjectDialog extends DialogBase { this.register(projectNameTextBox.onTextChanged(() => { this.model.name = projectNameTextBox.value!; - projectNameTextBox.updateProperty('title', projectNameTextBox.value); + return projectNameTextBox.updateProperty('title', projectNameTextBox.value); })); const locationTextBox = view.modelBuilder.inputBox().withProps({ @@ -175,7 +175,7 @@ export class NewProjectDialog extends DialogBase { this.register(locationTextBox.onTextChanged(() => { this.model.location = locationTextBox.value!; - locationTextBox.updateProperty('title', locationTextBox.value); + return locationTextBox.updateProperty('title', locationTextBox.value); })); const browseFolderButton = view.modelBuilder.button().withProps({ diff --git a/extensions/data-workspace/src/dialogs/openExistingDialog.ts b/extensions/data-workspace/src/dialogs/openExistingDialog.ts index 748f317beb..5b85f6e726 100644 --- a/extensions/data-workspace/src/dialogs/openExistingDialog.ts +++ b/extensions/data-workspace/src/dialogs/openExistingDialog.ts @@ -93,7 +93,7 @@ export class OpenExistingDialog extends DialogBase { await addProjectsPromise; } catch (err) { - vscode.window.showErrorMessage(err?.message ? err.message : err); + void vscode.window.showErrorMessage(err?.message ? err.message : err); } } @@ -142,7 +142,7 @@ export class OpenExistingDialog extends DialogBase { }).component(); this.register(gitRepoTextBox.onTextChanged(() => { - gitRepoTextBox.updateProperty('title', this.localClonePathTextBox!.value!); + return gitRepoTextBox.updateProperty('title', this.localClonePathTextBox!.value!); })); this.gitRepoTextBoxComponent = { @@ -158,7 +158,7 @@ export class OpenExistingDialog extends DialogBase { }).component(); this.register(this.localClonePathTextBox.onTextChanged(() => { - this.localClonePathTextBox!.updateProperty('title', this.localClonePathTextBox!.value!); + return this.localClonePathTextBox!.updateProperty('title', this.localClonePathTextBox!.value!); })); const localClonePathBrowseFolderButton = view.modelBuilder.button().withProps({ @@ -181,7 +181,7 @@ export class OpenExistingDialog extends DialogBase { const selectedFolder = folderUris[0].fsPath; this.localClonePathTextBox!.value = selectedFolder; - this.localClonePathTextBox!.updateProperty('title', this.localClonePathTextBox!.value); + void this.localClonePathTextBox!.updateProperty('title', this.localClonePathTextBox!.value); })); this.localClonePathComponent = { @@ -198,7 +198,7 @@ export class OpenExistingDialog extends DialogBase { }).component(); this.register(this.filePathTextBox.onTextChanged(() => { - this.filePathTextBox!.updateProperty('title', this.filePathTextBox!.value!); + return this.filePathTextBox!.updateProperty('title', this.filePathTextBox!.value!); })); const localProjectBrowseFolderButton = view.modelBuilder.button().withProps({ @@ -210,7 +210,7 @@ export class OpenExistingDialog extends DialogBase { this.register(localProjectBrowseFolderButton.onDidClick(() => this.onBrowseButtonClick())); const flexContainer = this.createHorizontalContainer(view, [this.filePathTextBox, localProjectBrowseFolderButton]); - flexContainer.updateCssStyles({ 'margin-top': '-10px' }); + void flexContainer.updateCssStyles({ 'margin-top': '-10px' }); this.filePathAndButtonComponent = { component: flexContainer }; diff --git a/extensions/data-workspace/src/main.ts b/extensions/data-workspace/src/main.ts index 9ffed062e3..f89ff91e8f 100644 --- a/extensions/data-workspace/src/main.ts +++ b/extensions/data-workspace/src/main.ts @@ -18,7 +18,7 @@ import { createNewProjectWithQuickpick } from './dialogs/newProjectQuickpick'; export async function activate(context: vscode.ExtensionContext): Promise { const azdataApi = getAzdataApi(); - vscode.commands.executeCommand('setContext', 'azdataAvailable', !!azdataApi); + void vscode.commands.executeCommand('setContext', 'azdataAvailable', !!azdataApi); const workspaceService = new WorkspaceService(); const workspaceTreeDataProvider = new WorkspaceTreeDataProvider(workspaceService); @@ -59,7 +59,7 @@ export async function activate(context: vscode.ExtensionContext): Promise { - vscode.commands.executeCommand('workbench.action.closeFolder'); + return vscode.commands.executeCommand('workbench.action.closeFolder'); })); context.subscriptions.push(vscode.commands.registerCommand('projects.manageProject', async (treeItem: WorkspaceTreeItem) => { @@ -73,7 +73,7 @@ export async function activate(context: vscode.ExtensionContext): Promise console.error('Error initializing projects in workspace ', err)); } get isProjectProviderAvailable(): boolean { @@ -81,7 +81,7 @@ export class WorkspaceService implements IWorkspaceService { for (const projectFile of projectFiles) { if (previousProjects.includes(projectFile.path)) { projectsAlreadyOpen.push(projectFile.fsPath); - vscode.window.showInformationMessage(constants.ProjectAlreadyOpened(projectFile.fsPath)); + void vscode.window.showInformationMessage(constants.ProjectAlreadyOpened(projectFile.fsPath)); } else { newProjectAdded = true; @@ -206,7 +206,7 @@ export class WorkspaceService implements IWorkspaceService { try { // show git output channel - vscode.commands.executeCommand('git.showOutput'); + void vscode.commands.executeCommand('git.showOutput'); const repositoryPath = await vscode.window.withProgress( opts, (progress, token) => gitApi.clone(url!, { parentPath: localClonePath!, progress, recursive: true }, token) @@ -214,9 +214,9 @@ export class WorkspaceService implements IWorkspaceService { // get all the project files in the cloned repo and add them to workspace const repoProjects = (await this.getAllProjectsInFolder(vscode.Uri.file(repositoryPath))); - this.addProjectsToWorkspace(repoProjects); + await this.addProjectsToWorkspace(repoProjects); } catch (e) { - vscode.window.showErrorMessage(constants.gitCloneError); + void vscode.window.showErrorMessage(constants.gitCloneError); console.error(e); } } diff --git a/extensions/data-workspace/src/test/workspaceTreeDataProvider.test.ts b/extensions/data-workspace/src/test/workspaceTreeDataProvider.test.ts index c3aa39445c..71c85c51c0 100644 --- a/extensions/data-workspace/src/test/workspaceTreeDataProvider.test.ts +++ b/extensions/data-workspace/src/test/workspaceTreeDataProvider.test.ts @@ -29,9 +29,9 @@ suite('workspaceTreeDataProvider Tests', function (): void { should.strictEqual(treeDataChangeHandler.calledOnce, true); }); - test('test getTreeItem()', () => { + test('test getTreeItem()', async function (): Promise { const getTreeItemStub = sinon.stub(); - treeProvider.getTreeItem(({ + await treeProvider.getTreeItem(({ treeDataProvider: ({ getTreeItem: (arg: WorkspaceTreeItem) => { return getTreeItemStub(arg);