提交 aab56e95 编写于 作者: S Sandeep Somavarapu

Fix #62370

上级 f8ea816c
......@@ -6,7 +6,7 @@
import * as DOM from 'vs/base/browser/dom';
import { defaultGenerator } from 'vs/base/common/idGenerator';
import { escape } from 'vs/base/common/strings';
import { removeMarkdownEscapes, IMarkdownString } from 'vs/base/common/htmlContent';
import { removeMarkdownEscapes, IMarkdownString, MarkdownString } from 'vs/base/common/htmlContent';
import * as marked from 'vs/base/common/marked/marked';
import { IMouseEvent } from 'vs/base/browser/mouseEvent';
import { IDisposable } from 'vs/base/common/lifecycle';
......@@ -182,7 +182,7 @@ export function renderMarkdown(markdown: IMarkdownString, options: RenderOptions
}
const markedOptions: marked.MarkedOptions = {
sanitize: true,
sanitize: markdown instanceof MarkdownString ? markdown.sanitize : true,
renderer
};
......
......@@ -16,6 +16,7 @@ export class MarkdownString implements IMarkdownString {
value: string;
isTrusted?: boolean;
sanitize: boolean = true;
constructor(value: string = '') {
this.value = value;
......
......@@ -3,10 +3,10 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as nls from 'vs/nls';
import { isNonEmptyArray } from 'vs/base/common/arrays';
import { Emitter, Event } from 'vs/base/common/event';
import { MarkdownString } from 'vs/base/common/htmlContent';
import { escape } from 'vs/base/common/strings';
import { Disposable, IDisposable, dispose } from 'vs/base/common/lifecycle';
import * as network from 'vs/base/common/network';
import { basename } from 'vs/base/common/paths';
......@@ -192,36 +192,47 @@ class ModelMarkerHandler {
let { message, source, relatedInformation, code } = marker;
if (typeof message === 'string') {
message = message.trim();
hoverMessage = new MarkdownString();
// Disable markdown renderer sanitize to allow html
// Hence, escape all input strings
hoverMessage.sanitize = false;
if (source) {
if (/\n/g.test(message)) {
if (code) {
message = nls.localize('diagAndSourceAndCodeMultiline', "[{0}]\n{1} [{2}]", source, message, code);
} else {
message = nls.localize('diagAndSourceMultiline', "[{0}]\n{1}", source, message);
}
} else {
if (code) {
message = nls.localize('diagAndSourceAndCode', "[{0}] {1} [{2}]", source, message, code);
} else {
message = nls.localize('diagAndSource', "[{0}] {1}", source, message);
}
hoverMessage.appendMarkdown(`<span style='opacity: 0.6'>[${escape(source)}]</span>`);
hoverMessage.appendText(' ');
}
message = message.trim();
const lines = message.split(/\r\n|\r|\n/g);
if (lines.length > 1) {
if (source) {
hoverMessage.appendMarkdown(`</br>`);
}
for (const line of lines) {
hoverMessage.appendText(line);
hoverMessage.appendMarkdown(`</br>`);
}
} else {
hoverMessage.appendText(message);
}
hoverMessage = new MarkdownString().appendCodeblock('_', message);
if (code) {
if (lines.length === 1) {
hoverMessage.appendText(' ');
}
hoverMessage.appendMarkdown(`<span style='opacity: 0.6'>[${escape(code)}]</span>`);
}
if (isNonEmptyArray(relatedInformation)) {
hoverMessage.appendMarkdown('\n');
hoverMessage.appendMarkdown(`\n`);
for (const { message, resource, startLineNumber, startColumn } of relatedInformation) {
hoverMessage.appendMarkdown(
`* [${basename(resource.path)}(${startLineNumber}, ${startColumn})](${resource.toString(false)}#${startLineNumber},${startColumn}): `
escape(`* [${basename(resource.path)}(${startLineNumber}, ${startColumn})](${resource.toString(false)}#${startLineNumber},${startColumn}): `)
);
hoverMessage.appendText(`${message}`);
hoverMessage.appendMarkdown('\n');
hoverMessage.appendText(`${escape(message)}`);
hoverMessage.appendMarkdown(`\n`);
}
hoverMessage.appendMarkdown('\n');
hoverMessage.appendMarkdown(`\n`);
}
}
......
......@@ -125,6 +125,7 @@ class MessageWidget {
const sourceElement = document.createElement('div');
sourceElement.innerText = `[${source}] `;
dom.addClass(sourceElement, 'source');
this._editor.applyFontInfo(sourceElement);
this._messageBlock.appendChild(sourceElement);
}
const messageElement = document.createElement('div');
......@@ -135,6 +136,7 @@ class MessageWidget {
const codeElement = document.createElement('div');
codeElement.innerText = ` [${code}]`;
dom.addClass(codeElement, 'code');
this._editor.applyFontInfo(codeElement);
this._messageBlock.appendChild(codeElement);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册