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:
Meghan Kulkarni
2023-07-20 15:16:40 -07:00
committed by GitHub
parent aa7bc8579a
commit 2ba9f17b3f
6 changed files with 244 additions and 62 deletions

View File

@@ -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: [