Allow passing in a DataTransferFile to workspace edit (#175809)

* Allow passing in a `DataTransferItem` to workspace edit

Fixes #175800

Allows you to pass a file `DataTransferItem` to `WorkspaceEdit.createFile`. This lets us avoid transferring the data back and forth to the extension host, and also avoid having to base64 encode and decode it, significantly improving performance for large files

* Take data transfer file instead of data transfer item
This commit is contained in:
Matt Bierner
2023-04-13 14:08:08 -07:00
committed by GitHub
parent 3a02bc9de1
commit 830d534e27
14 changed files with 103 additions and 41 deletions

View File

@@ -31,8 +31,9 @@ class PasteEditProvider implements vscode.DocumentPasteEditProvider {
}
for (const imageMime of supportedImageMimes) {
const file = dataTransfer.get(imageMime)?.asFile();
if (file) {
const item = dataTransfer.get(imageMime);
const file = item?.asFile();
if (item && file) {
const edit = await this._makeCreateImagePasteEdit(document, file, token);
if (token.isCancellationRequested) {
return;
@@ -70,7 +71,7 @@ class PasteEditProvider implements vscode.DocumentPasteEditProvider {
// Note that there is currently no way to undo the file creation :/
const workspaceEdit = new vscode.WorkspaceEdit();
workspaceEdit.createFile(uri, { contents: await file.data() });
workspaceEdit.createFile(uri, { contents: file });
const pasteEdit = new vscode.DocumentPasteEdit(snippet);
pasteEdit.additionalEdit = workspaceEdit;