Automatic markdown pasting should escape parentheses (#189357)

auto link with mismatched parens
This commit is contained in:
Meghan Kulkarni 2023-07-31 15:01:01 -07:00 committed by GitHub
parent c75dd82e41
commit 1fcc384bae
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 18 additions and 6 deletions

View file

@ -214,9 +214,9 @@ export function appendToLinkSnippet(
if (pasteAsMarkdownLink) {
snippet.appendText('[');
snippet.appendPlaceholder(escapeBrackets(title) || 'Title', placeholderValue);
snippet.appendText(isExternalLink ? `](${uriString})` : `](${escapeMarkdownLinkPath(mdPath)})`);
snippet.appendText(`](${escapeMarkdownLinkPath(isExternalLink ? uriString : mdPath, isExternalLink)})`);
} else {
snippet.appendText(isExternalLink ? uriString : escapeMarkdownLinkPath(mdPath));
snippet.appendText((escapeMarkdownLinkPath(isExternalLink ? uriString : mdPath, isExternalLink)));
}
return snippet;
}
@ -268,9 +268,9 @@ export function createUriListSnippet(
const placeholderText = escapeBrackets(title) || options?.placeholderText || 'Alt text';
const placeholderIndex = typeof options?.placeholderStartIndex !== 'undefined' ? options?.placeholderStartIndex + i : (placeholderValue === 0 ? undefined : placeholderValue);
snippet.appendPlaceholder(placeholderText, placeholderIndex);
snippet.appendText(`](${escapeMarkdownLinkPath(mdPath)})`);
snippet.appendText(`](${escapeMarkdownLinkPath(mdPath, isExternalLink)})`);
} else {
snippet.appendText(escapeMarkdownLinkPath(mdPath));
snippet.appendText(escapeMarkdownLinkPath(mdPath, isExternalLink));
}
}
} else {
@ -397,12 +397,12 @@ function escapeHtmlAttribute(attr: string): string {
return encodeURI(attr).replaceAll('"', '"');
}
function escapeMarkdownLinkPath(mdPath: string): string {
function escapeMarkdownLinkPath(mdPath: string, isExternalLink: boolean): string {
if (needsBracketLink(mdPath)) {
return '<' + mdPath.replaceAll('<', '\\<').replaceAll('>', '\\>') + '>';
}
return encodeURI(mdPath);
return isExternalLink ? mdPath : encodeURI(mdPath);
}
function escapeBrackets(value: string): string {

View file

@ -102,6 +102,18 @@ suite('createEditAddingLinksForUriList', () => {
});
suite('appendToLinkSnippet', () => {
test('Should create auto link when pasted link has an mismatched parentheses', () => {
const uriString = 'https://www.mic(rosoft.com';
const snippet = appendToLinkSnippet(new vscode.SnippetString(''), false, 'https:/www.microsoft.com', '', uriString, 0, true);
assert.strictEqual(snippet?.value, '<https://www.mic(rosoft.com>');
});
test('Should create snippet with < > when pasted link has an mismatched parentheses', () => {
const uriString = 'https://www.mic(rosoft.com';
const snippet = appendToLinkSnippet(new vscode.SnippetString(''), true, 'https:/www.microsoft.com', 'abc', uriString, 0, true);
assert.strictEqual(snippet?.value, '[${0:abc}](<https://www.mic(rosoft.com>)');
});
test('Should not create Markdown link snippet when pasteAsMarkdownLink is false', () => {
const uriString = 'https://www.microsoft.com';
const snippet = appendToLinkSnippet(new vscode.SnippetString(''), false, 'https:/www.microsoft.com', '', uriString, 0, true);