mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-22 17:48:56 +01:00
making the markdown link paste feature smart (#188119)
* making markdown link pasting feature smarter * Update settings description Co-authored-by: Joyce Er <joyceerhl@gmail.com> * made checkPaste more concise * won't paste md link in fenced code or math * updated the smart md link pasting * link validation and naming changes * resolving comments and tests * resolving comments & writing tests --------- Co-authored-by: Joyce Er <joyceerhl@gmail.com>
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import * as vscode from 'vscode';
|
||||
import { getMarkdownLink } from './shared';
|
||||
import { externalUriSchemes, createEditAddingLinksForUriList } from './shared';
|
||||
class PasteLinkEditProvider implements vscode.DocumentPasteEditProvider {
|
||||
|
||||
readonly id = 'insertMarkdownLink';
|
||||
@@ -19,20 +19,22 @@ class PasteLinkEditProvider implements vscode.DocumentPasteEditProvider {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if dataTransfer contains a URL
|
||||
const item = dataTransfer.get('text/plain');
|
||||
try {
|
||||
new URL(await item?.value);
|
||||
} catch (error) {
|
||||
const urlList = await item?.asString();
|
||||
|
||||
if (urlList === undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!validateLink(urlList)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const uriEdit = new vscode.DocumentPasteEdit('', this.id, '');
|
||||
const urlList = await item?.asString();
|
||||
if (!urlList) {
|
||||
return undefined;
|
||||
}
|
||||
const pasteEdit = await getMarkdownLink(document, ranges, urlList, token);
|
||||
const pasteEdit = await createEditAddingLinksForUriList(document, ranges, urlList, token, true);
|
||||
if (!pasteEdit) {
|
||||
return;
|
||||
}
|
||||
@@ -43,6 +45,14 @@ class PasteLinkEditProvider implements vscode.DocumentPasteEditProvider {
|
||||
}
|
||||
}
|
||||
|
||||
export function validateLink(urlList: string): boolean {
|
||||
const url = urlList?.split(/\s+/);
|
||||
if (url.length > 1 || !externalUriSchemes.includes(vscode.Uri.parse(url[0]).scheme)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
export function registerLinkPasteSupport(selector: vscode.DocumentSelector,) {
|
||||
return vscode.languages.registerDocumentPasteEditProvider(selector, new PasteLinkEditProvider(), {
|
||||
pasteMimeTypes: [
|
||||
|
||||
Reference in New Issue
Block a user