💄 remove setting renderer knowledge from markdown document renderer (#214955)

This commit is contained in:
João Moreno 2024-06-12 17:27:00 +02:00 committed by GitHub
parent 594154c8d8
commit 79abdbc1fc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 19 additions and 17 deletions

View file

@ -774,7 +774,7 @@ export class ExtensionEditor extends EditorPane {
return '';
}
const content = await renderMarkdownDocument(contents, this.extensionService, this.languageService, extension.type !== ExtensionType.System, false, token);
const content = await renderMarkdownDocument(contents, this.extensionService, this.languageService, { shouldSanitize: extension.type !== ExtensionType.System, token });
if (token?.isCancellationRequested) {
return '';
}

View file

@ -13,7 +13,6 @@ import { ILanguageService } from 'vs/editor/common/languages/language';
import { tokenizeToString } from 'vs/editor/common/languages/textToHtmlTokenizer';
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
import { escape } from 'vs/base/common/strings';
import { SimpleSettingRenderer } from 'vs/workbench/contrib/markdown/browser/markdownSettingRenderer';
export const DEFAULT_MARKDOWN_STYLES = `
body {
@ -184,6 +183,13 @@ function sanitize(documentContent: string, allowUnknownProtocols: boolean): stri
}
}
interface IRenderMarkdownDocumentOptions {
readonly shouldSanitize?: boolean;
readonly allowUnknownProtocols?: boolean;
readonly renderer?: marked.Renderer;
readonly token?: CancellationToken;
}
/**
* Renders a string of markdown as a document.
*
@ -193,10 +199,7 @@ export async function renderMarkdownDocument(
text: string,
extensionService: IExtensionService,
languageService: ILanguageService,
shouldSanitize: boolean = true,
allowUnknownProtocols: boolean = false,
token?: CancellationToken,
settingRenderer?: SimpleSettingRenderer
options?: IRenderMarkdownDocumentOptions
): Promise<string> {
const highlight = (code: string, lang: string | undefined, callback: ((error: any, code: string) => void) | undefined): any => {
@ -210,7 +213,7 @@ export async function renderMarkdownDocument(
}
extensionService.whenInstalledExtensionsRegistered().then(async () => {
if (token?.isCancellationRequested) {
if (options?.token?.isCancellationRequested) {
callback(null, '');
return;
}
@ -222,16 +225,11 @@ export async function renderMarkdownDocument(
return '';
};
const renderer = new marked.Renderer();
if (settingRenderer) {
renderer.html = settingRenderer.getHtmlRenderer();
}
return new Promise<string>((resolve, reject) => {
marked(text, { highlight, renderer }, (err, value) => err ? reject(err) : resolve(value));
marked(text, { highlight, renderer: options?.renderer }, (err, value) => err ? reject(err) : resolve(value));
}).then(raw => {
if (shouldSanitize) {
return sanitize(raw, allowUnknownProtocols);
if (options?.shouldSanitize ?? true) {
return sanitize(raw, options?.allowUnknownProtocols ?? false);
} else {
return raw;
}

View file

@ -34,6 +34,7 @@ import { SimpleSettingRenderer } from 'vs/workbench/contrib/markdown/browser/mar
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { Schemas } from 'vs/base/common/network';
import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService';
import { marked } from 'vs/base/common/marked/marked';
export class ReleaseNotesManager {
private readonly _simpleSettingRenderer: SimpleSettingRenderer;
@ -249,7 +250,10 @@ export class ReleaseNotesManager {
private async renderBody(text: string) {
const nonce = generateUuid();
const content = await renderMarkdownDocument(text, this._extensionService, this._languageService, false, undefined, undefined, this._simpleSettingRenderer);
const renderer = new marked.Renderer();
renderer.html = this._simpleSettingRenderer.getHtmlRenderer();
const content = await renderMarkdownDocument(text, this._extensionService, this._languageService, { shouldSanitize: false, renderer });
const colorMap = TokenizationRegistry.getColorMap();
const css = colorMap ? generateTokensCSSForColorMap(colorMap) : '';
const showReleaseNotes = Boolean(this._configurationService.getValue<boolean>('update.showReleaseNotes'));

View file

@ -211,7 +211,7 @@ export class GettingStartedDetailsRenderer {
private async readAndCacheStepMarkdown(path: URI, base: URI): Promise<string> {
if (!this.mdCache.has(path)) {
const contents = await this.readContentsOfPath(path);
const markdownContents = await renderMarkdownDocument(transformUris(contents, base), this.extensionService, this.languageService, true, true);
const markdownContents = await renderMarkdownDocument(transformUris(contents, base), this.extensionService, this.languageService, { allowUnknownProtocols: true });
this.mdCache.set(path, markdownContents);
}
return assertIsDefined(this.mdCache.get(path));