Skip to content

Commit 8e1c5ad

Browse files
authored
Prevent concurrency-related errors when saving server-side files when source control is enabled (#1637)
1 parent c84a57f commit 8e1c5ad

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

src/providers/FileSystemProvider/FileSystemProvider.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -561,7 +561,11 @@ export class FileSystemProvider implements vscode.FileSystemProvider {
561561
!uri.path.includes("/_vscode/") &&
562562
vscode.workspace.getConfiguration("objectscript", uri).get("compileOnSave")
563563
) {
564-
this.compile(uri, entry, update);
564+
// Need to return the compile promise because technically the post-save compilation
565+
// is part of the "write" operation from VS Code's point of view. This is required
566+
// to prevent concurreny issues when VS Code refreshs its internal representaton of
567+
// the file system while documents are being compiled.
568+
return this.compile(uri, entry, update);
565569
} else if (update) {
566570
// The file's contents may have changed as a result of the save,
567571
// so make sure we notify VS Code and any watchers of the change
@@ -589,7 +593,7 @@ export class FileSystemProvider implements vscode.FileSystemProvider {
589593
// Force VS Code to refresh the file's contents in the editor UI
590594
vscode.commands.executeCommand("workbench.action.files.revert");
591595
}
592-
}, 25);
596+
}, 75);
593597
}
594598
}
595599

@@ -875,7 +879,7 @@ export class FileSystemProvider implements vscode.FileSystemProvider {
875879
this._fireSoon(
876880
...(
877881
await api
878-
.actionIndex(Array.from(new Set(...compileList.concat(filesToUpdate))))
882+
.actionIndex(Array.from(new Set(compileList.concat(filesToUpdate))))
879883
.then((data) => data.result.content.flatMap((idx) => (!idx.status.length ? idx.others : [])))
880884
.catch(() => {
881885
// Index API returned an error. This should never happen.

0 commit comments

Comments
 (0)