Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/microsoft/vscode.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Bierner <matb@microsoft.com>2022-06-08 22:06:55 +0300
committerGitHub <noreply@github.com>2022-06-08 22:06:55 +0300
commit370dfd5fee7049a9c909ffbd4120bf26dc315002 (patch)
tree11d3d781ce966d8ddef8ec14e870ac1445e78b1b /extensions
parent5a32c3ff17eb5cd91e42309c8058812fdd90c83d (diff)
Iterate on paste edit provider api (#151477)
* Iterate on paste edit provider api For #30066 - Pass all selections to paste providers. For #151326 - Introduce `DocumentPasteEdit` as return type. This new type uses an `insertText` that is applied to every paste location (for multicursor), plus an optional additional edit - Add `DocumentPasteProviderMetadata`. This lets extensions tell us which types of mimetypes they are interested in, letting us avoid round trips if no extensions care about the pasted data * Correctly batch insertText
Diffstat (limited to 'extensions')
-rw-r--r--extensions/markdown-language-features/src/languageFeatures/copyPaste.ts14
-rw-r--r--extensions/markdown-language-features/src/languageFeatures/dropIntoEditor.ts12
2 files changed, 18 insertions, 8 deletions
diff --git a/extensions/markdown-language-features/src/languageFeatures/copyPaste.ts b/extensions/markdown-language-features/src/languageFeatures/copyPaste.ts
index d9e939b463c..c36403d06ee 100644
--- a/extensions/markdown-language-features/src/languageFeatures/copyPaste.ts
+++ b/extensions/markdown-language-features/src/languageFeatures/copyPaste.ts
@@ -4,23 +4,29 @@
*--------------------------------------------------------------------------------------------*/
import * as vscode from 'vscode';
-import { tryInsertUriList } from './dropIntoEditor';
+import { tryGetUriListSnippet } from './dropIntoEditor';
export function registerPasteProvider(selector: vscode.DocumentSelector) {
return vscode.languages.registerDocumentPasteEditProvider(selector, new class implements vscode.DocumentPasteEditProvider {
async provideDocumentPasteEdits(
document: vscode.TextDocument,
- range: vscode.Range,
+ _ranges: readonly vscode.Range[],
dataTransfer: vscode.DataTransfer,
token: vscode.CancellationToken,
- ): Promise<vscode.SnippetTextEdit | undefined> {
+ ): Promise<vscode.DocumentPasteEdit | undefined> {
const enabled = vscode.workspace.getConfiguration('markdown', document).get('experimental.editor.pasteLinks.enabled', false);
if (!enabled) {
return;
}
- return tryInsertUriList(document, range, dataTransfer, token);
+ const snippet = await tryGetUriListSnippet(document, dataTransfer, token);
+ if (snippet) {
+ return { insertText: snippet };
+ }
+ return undefined;
}
+ }, {
+ pasteMimeTypes: ['text/uri-list']
});
}
diff --git a/extensions/markdown-language-features/src/languageFeatures/dropIntoEditor.ts b/extensions/markdown-language-features/src/languageFeatures/dropIntoEditor.ts
index 2ad71ec0516..b451ea40a4e 100644
--- a/extensions/markdown-language-features/src/languageFeatures/dropIntoEditor.ts
+++ b/extensions/markdown-language-features/src/languageFeatures/dropIntoEditor.ts
@@ -28,16 +28,20 @@ export function registerDropIntoEditor(selector: vscode.DocumentSelector) {
async provideDocumentOnDropEdits(document: vscode.TextDocument, position: vscode.Position, dataTransfer: vscode.DataTransfer, token: vscode.CancellationToken): Promise<vscode.SnippetTextEdit | undefined> {
const enabled = vscode.workspace.getConfiguration('markdown', document).get('editor.drop.enabled', true);
if (!enabled) {
- return;
+ return undefined;
}
const replacementRange = new vscode.Range(position, position);
- return tryInsertUriList(document, replacementRange, dataTransfer, token);
+ const snippet = await tryGetUriListSnippet(document, dataTransfer, token);
+ if (snippet) {
+ return new vscode.SnippetTextEdit(replacementRange, snippet);
+ }
+ return undefined;
}
});
}
-export async function tryInsertUriList(document: vscode.TextDocument, replacementRange: vscode.Range, dataTransfer: vscode.DataTransfer, token: vscode.CancellationToken): Promise<vscode.SnippetTextEdit | undefined> {
+export async function tryGetUriListSnippet(document: vscode.TextDocument, dataTransfer: vscode.DataTransfer, token: vscode.CancellationToken): Promise<vscode.SnippetString | undefined> {
const urlList = await dataTransfer.get('text/uri-list')?.asString();
if (!urlList || token.isCancellationRequested) {
return undefined;
@@ -72,5 +76,5 @@ export async function tryInsertUriList(document: vscode.TextDocument, replacemen
}
});
- return new vscode.SnippetTextEdit(replacementRange, snippet);
+ return snippet;
}