Skip to content

Commit 9cfbf0d

Browse files
committed
Eliminate problematic flaoting promises
We have a lot of floating promises in our code, some explicitly so, others likely being oversights. Will add a new eslint rule to watch for floating promises, fixing some and using "void" to ignore the others.
1 parent 3f1fc9a commit 9cfbf0d

39 files changed

+158
-124
lines changed

.eslintrc.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
"parser": "@typescript-eslint/parser",
44
"parserOptions": {
55
"ecmaVersion": 2020,
6-
"sourceType": "module"
6+
"sourceType": "module",
7+
"project": true
78
},
89
"plugins": ["@typescript-eslint"],
910
"rules": {
@@ -13,6 +14,7 @@
1314
// TODO "@typescript-eslint/semi" rule moved to https://eslint.style
1415
"semi": "error",
1516
"no-console": "warn",
17+
"@typescript-eslint/no-floating-promises": "warn",
1618
// Mostly fails tests, ex. expect(...).to.be.true returns a Chai.Assertion
1719
"@typescript-eslint/no-unused-expressions": "off",
1820
"@typescript-eslint/no-non-null-assertion": "off",

scripts/tsconfig.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"compilerOptions": {
3+
"composite": true,
4+
5+
"rootDir": ".",
6+
"outDir": "dist",
7+
8+
"lib": ["ES2021"],
9+
"target": "ES2020",
10+
"module": "commonjs",
11+
12+
"strict": true,
13+
14+
"sourceMap": true,
15+
16+
"types": []
17+
}
18+
}

src/BackgroundCompilation.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export class BackgroundCompilation implements vscode.Disposable {
5858
this.workspaceFileWatcher.onDidChange(
5959
debounce(
6060
() => {
61-
this.runTask();
61+
void this.runTask();
6262
},
6363
100 /* 10 times per second */,
6464
{ trailing: true }

src/FolderContext.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ export class FolderContext implements vscode.Disposable {
154154
* @param event event type
155155
*/
156156
async fireEvent(event: FolderOperation) {
157-
this.workspaceContext.fireEvent(this, event);
157+
await this.workspaceContext.fireEvent(this, event);
158158
}
159159

160160
/** Return edited Packages folder */

src/PackageWatcher.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ export class PackageWatcher {
128128
async handleSwiftVersionFileChange() {
129129
const version = await this.readSwiftVersionFile();
130130
if (version && version.toString() !== this.currentVersion?.toString()) {
131-
this.workspaceContext.fireEvent(
131+
await this.workspaceContext.fireEvent(
132132
this.folderContext,
133133
FolderOperation.swiftVersionUpdated
134134
);
@@ -162,7 +162,7 @@ export class PackageWatcher {
162162
async handlePackageSwiftChange() {
163163
// Load SwiftPM Package.swift description
164164
await this.folderContext.reload();
165-
this.workspaceContext.fireEvent(this.folderContext, FolderOperation.packageUpdated);
165+
await this.workspaceContext.fireEvent(this.folderContext, FolderOperation.packageUpdated);
166166
}
167167

168168
/**
@@ -175,7 +175,10 @@ export class PackageWatcher {
175175
await this.folderContext.reloadPackageResolved();
176176
// if file contents has changed then send resolve updated message
177177
if (this.folderContext.swiftPackage.resolved?.fileHash !== packageResolvedHash) {
178-
this.workspaceContext.fireEvent(this.folderContext, FolderOperation.resolvedUpdated);
178+
await this.workspaceContext.fireEvent(
179+
this.folderContext,
180+
FolderOperation.resolvedUpdated
181+
);
179182
}
180183
}
181184

@@ -186,6 +189,9 @@ export class PackageWatcher {
186189
*/
187190
private async handleWorkspaceStateChange() {
188191
await this.folderContext.reloadWorkspaceState();
189-
this.workspaceContext.fireEvent(this.folderContext, FolderOperation.workspaceStateUpdated);
192+
await this.workspaceContext.fireEvent(
193+
this.folderContext,
194+
FolderOperation.workspaceStateUpdated
195+
);
190196
}
191197
}

src/TestExplorer/TestExplorer.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,9 @@ export class TestExplorer {
8787
this.testFileEdited = false;
8888

8989
// only run discover tests if the library has tests
90-
this.folderContext.swiftPackage.getTargets(TargetType.test).then(targets => {
90+
void this.folderContext.swiftPackage.getTargets(TargetType.test).then(targets => {
9191
if (targets.length > 0) {
92-
this.discoverTestsInWorkspace(this.tokenSource.token);
92+
void this.discoverTestsInWorkspace(this.tokenSource.token);
9393
}
9494
});
9595
}
@@ -98,7 +98,7 @@ export class TestExplorer {
9898
// add file watcher to catch changes to swift test files
9999
const fileWatcher = this.folderContext.workspaceContext.onDidChangeSwiftFiles(({ uri }) => {
100100
if (this.testFileEdited === false) {
101-
this.folderContext.getTestTarget(uri).then(target => {
101+
void this.folderContext.getTestTarget(uri).then(target => {
102102
if (target) {
103103
this.testFileEdited = true;
104104
}
@@ -138,7 +138,7 @@ export class TestExplorer {
138138
switch (operation) {
139139
case FolderOperation.add:
140140
if (folder) {
141-
folder.swiftPackage.getTargets(TargetType.test).then(targets => {
141+
void folder.swiftPackage.getTargets(TargetType.test).then(targets => {
142142
if (targets.length === 0) {
143143
return;
144144
}
@@ -149,7 +149,7 @@ export class TestExplorer {
149149
if (
150150
!configuration.folder(folder.workspaceFolder).disableAutoResolve
151151
) {
152-
folder.testExplorer?.discoverTestsInWorkspace(
152+
void folder.testExplorer?.discoverTestsInWorkspace(
153153
tokenSource.token
154154
);
155155
}
@@ -158,7 +158,7 @@ export class TestExplorer {
158158
break;
159159
case FolderOperation.packageUpdated:
160160
if (folder) {
161-
folder.swiftPackage.getTargets(TargetType.test).then(targets => {
161+
void folder.swiftPackage.getTargets(TargetType.test).then(targets => {
162162
const hasTestTargets = targets.length > 0;
163163
if (hasTestTargets && !folder.hasTestExplorer()) {
164164
folder.addTestExplorer();
@@ -168,7 +168,7 @@ export class TestExplorer {
168168
!configuration.folder(folder.workspaceFolder)
169169
.disableAutoResolve
170170
) {
171-
folder.testExplorer?.discoverTestsInWorkspace(
171+
void folder.testExplorer?.discoverTestsInWorkspace(
172172
tokenSource.token
173173
);
174174
}
@@ -219,7 +219,7 @@ export class TestExplorer {
219219
const testExplorer = folder?.testExplorer;
220220
if (testExplorer && symbols && uri && uri.scheme === "file") {
221221
if (isPathInsidePath(uri.fsPath, folder.folder.fsPath)) {
222-
folder.swiftPackage.getTarget(uri.fsPath).then(target => {
222+
void folder.swiftPackage.getTarget(uri.fsPath).then(target => {
223223
if (target && target.type === "test") {
224224
testExplorer.lspTestDiscovery
225225
.getDocumentTests(folder.swiftPackage, uri)

src/TestExplorer/TestParsers/SwiftTestingOutputParser.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ export class SwiftTestingOutputParser {
211211

212212
rl.on("line", line => this.parse(JSON.parse(line), runState));
213213

214-
reader.start(readlinePipe);
214+
await reader.start(readlinePipe);
215215
}
216216

217217
/**

src/TestExplorer/TestRunner.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -729,7 +729,7 @@ export class TestRunner {
729729
// discarded. If the test run has already started this is a no-op so its safe to call it multiple times.
730730
this.testRun.testRunStarted();
731731

732-
this.swiftTestOutputParser.close();
732+
await this.swiftTestOutputParser.close();
733733
}
734734
} finally {
735735
outputStream.end();
@@ -807,7 +807,7 @@ export class TestRunner {
807807
}
808808
});
809809

810-
this.folderContext.taskQueue.queueOperation(
810+
void this.folderContext.taskQueue.queueOperation(
811811
new TaskOperation(task),
812812
this.testRun.token
813813
);

src/WorkspaceContext.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ export class WorkspaceContext implements vscode.Disposable {
133133
break;
134134
case FolderOperation.focus:
135135
this.updateContextKeys(event.folder);
136-
this.updateContextKeysForFile();
136+
void this.updateContextKeysForFile();
137137
break;
138138
case FolderOperation.unfocus:
139139
this.updateContextKeys(event.folder);
@@ -232,7 +232,7 @@ export class WorkspaceContext implements vscode.Disposable {
232232
return;
233233
}
234234

235-
Promise.all([
235+
void Promise.all([
236236
folderContext.swiftPackage.foundPackage,
237237
folderContext.swiftPackage.dependencies,
238238
]).then(([foundPackage, dependencies]) => {
@@ -256,7 +256,7 @@ export class WorkspaceContext implements vscode.Disposable {
256256

257257
if (this.currentFolder) {
258258
const languageClient = this.languageClientManager.get(this.currentFolder);
259-
languageClient.useLanguageClient(async client => {
259+
await languageClient.useLanguageClient(async client => {
260260
const experimentalCaps = client.initializeResult?.capabilities.experimental;
261261
if (!experimentalCaps) {
262262
contextKeys.supportsReindexing = false;
@@ -296,7 +296,7 @@ export class WorkspaceContext implements vscode.Disposable {
296296
console.log("Trying to run onDidChangeWorkspaceFolders on deleted context");
297297
return;
298298
}
299-
this.onDidChangeWorkspaceFolders(event);
299+
void this.onDidChangeWorkspaceFolders(event);
300300
});
301301
// add event listener for when the active edited text document changes
302302
const onDidChangeActiveWindow = vscode.window.onDidChangeActiveTextEditor(async editor => {
@@ -327,7 +327,7 @@ export class WorkspaceContext implements vscode.Disposable {
327327
await this.focusFolder(null);
328328
}
329329
}
330-
this.initialisationComplete();
330+
await this.initialisationComplete();
331331
}
332332

333333
/**
@@ -450,7 +450,7 @@ export class WorkspaceContext implements vscode.Disposable {
450450
// if current folder is this folder send unfocus event by setting
451451
// current folder to undefined
452452
if (this.currentFolder === folder) {
453-
this.focusFolder(null);
453+
await this.focusFolder(null);
454454
}
455455
// run observer functions in reverse order when removing
456456
const observersReversed = [...this.observers];
@@ -519,10 +519,10 @@ export class WorkspaceContext implements vscode.Disposable {
519519
}
520520
}
521521

522-
private initialisationComplete() {
522+
private async initialisationComplete() {
523523
this.initialisationFinished = true;
524524
if (this.lastFocusUri) {
525-
this.focusUri(this.lastFocusUri);
525+
await this.focusUri(this.lastFocusUri);
526526
this.lastFocusUri = undefined;
527527
}
528528
}

src/commands/createNewProject.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export async function createNewProject(toolchain: SwiftToolchain | undefined): P
3030
// run before the Swift extension is activated. Show the toolchain error notification in
3131
// this case.
3232
if (!toolchain) {
33-
showToolchainError();
33+
void showToolchainError();
3434
return;
3535
}
3636

0 commit comments

Comments
 (0)