Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/markdown-language-features/src/languageFeatures/copyFiles/snippets.ts
3294 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
/**
7
* Resolves variables in a VS Code snippet style string
8
*/
9
export function resolveSnippet(snippetString: string, vars: ReadonlyMap<string, string>): string {
10
return snippetString.replaceAll(/(?<escape>\\\$)|(?<!\\)\$\{(?<name>\w+)(?:\/(?<pattern>(?:\\\/|[^\}])+?)\/(?<replacement>(?:\\\/|[^\}])+?)\/)?\}/g, (match, _escape, name, pattern, replacement, _offset, _str, groups) => {
11
if (groups?.['escape']) {
12
return '$';
13
}
14
15
const entry = vars.get(name);
16
if (typeof entry !== 'string') {
17
return match;
18
}
19
20
if (pattern && replacement) {
21
return entry.replace(new RegExp(replaceTransformEscapes(pattern)), replaceTransformEscapes(replacement));
22
}
23
24
return entry;
25
});
26
}
27
28
29
function replaceTransformEscapes(str: string): string {
30
return str.replaceAll(/\\\//g, '/');
31
}
32
33
34