Skip to content

Commit aab56e9

Browse files
committed
Fix #62370
1 parent f8ea816 commit aab56e9

File tree

4 files changed

+36
-22
lines changed

4 files changed

+36
-22
lines changed

src/vs/base/browser/htmlContentRenderer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import * as DOM from 'vs/base/browser/dom';
77
import { defaultGenerator } from 'vs/base/common/idGenerator';
88
import { escape } from 'vs/base/common/strings';
9-
import { removeMarkdownEscapes, IMarkdownString } from 'vs/base/common/htmlContent';
9+
import { removeMarkdownEscapes, IMarkdownString, MarkdownString } from 'vs/base/common/htmlContent';
1010
import * as marked from 'vs/base/common/marked/marked';
1111
import { IMouseEvent } from 'vs/base/browser/mouseEvent';
1212
import { IDisposable } from 'vs/base/common/lifecycle';
@@ -182,7 +182,7 @@ export function renderMarkdown(markdown: IMarkdownString, options: RenderOptions
182182
}
183183

184184
const markedOptions: marked.MarkedOptions = {
185-
sanitize: true,
185+
sanitize: markdown instanceof MarkdownString ? markdown.sanitize : true,
186186
renderer
187187
};
188188

src/vs/base/common/htmlContent.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export class MarkdownString implements IMarkdownString {
1616

1717
value: string;
1818
isTrusted?: boolean;
19+
sanitize: boolean = true;
1920

2021
constructor(value: string = '') {
2122
this.value = value;

src/vs/editor/common/services/modelServiceImpl.ts

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
* Licensed under the MIT License. See License.txt in the project root for license information.
44
*--------------------------------------------------------------------------------------------*/
55

6-
import * as nls from 'vs/nls';
76
import { isNonEmptyArray } from 'vs/base/common/arrays';
87
import { Emitter, Event } from 'vs/base/common/event';
98
import { MarkdownString } from 'vs/base/common/htmlContent';
9+
import { escape } from 'vs/base/common/strings';
1010
import { Disposable, IDisposable, dispose } from 'vs/base/common/lifecycle';
1111
import * as network from 'vs/base/common/network';
1212
import { basename } from 'vs/base/common/paths';
@@ -192,36 +192,47 @@ class ModelMarkerHandler {
192192
let { message, source, relatedInformation, code } = marker;
193193

194194
if (typeof message === 'string') {
195-
message = message.trim();
196195

196+
hoverMessage = new MarkdownString();
197+
// Disable markdown renderer sanitize to allow html
198+
// Hence, escape all input strings
199+
hoverMessage.sanitize = false;
197200
if (source) {
198-
if (/\n/g.test(message)) {
199-
if (code) {
200-
message = nls.localize('diagAndSourceAndCodeMultiline', "[{0}]\n{1} [{2}]", source, message, code);
201-
} else {
202-
message = nls.localize('diagAndSourceMultiline', "[{0}]\n{1}", source, message);
203-
}
204-
} else {
205-
if (code) {
206-
message = nls.localize('diagAndSourceAndCode', "[{0}] {1} [{2}]", source, message, code);
207-
} else {
208-
message = nls.localize('diagAndSource', "[{0}] {1}", source, message);
209-
}
201+
hoverMessage.appendMarkdown(`<span style='opacity: 0.6'>[${escape(source)}]</span>`);
202+
hoverMessage.appendText(' ');
203+
}
204+
205+
message = message.trim();
206+
const lines = message.split(/\r\n|\r|\n/g);
207+
if (lines.length > 1) {
208+
if (source) {
209+
hoverMessage.appendMarkdown(`</br>`);
210210
}
211+
for (const line of lines) {
212+
hoverMessage.appendText(line);
213+
hoverMessage.appendMarkdown(`</br>`);
214+
}
215+
} else {
216+
hoverMessage.appendText(message);
211217
}
212218

213-
hoverMessage = new MarkdownString().appendCodeblock('_', message);
219+
if (code) {
220+
if (lines.length === 1) {
221+
hoverMessage.appendText(' ');
222+
}
223+
hoverMessage.appendMarkdown(`<span style='opacity: 0.6'>[${escape(code)}]</span>`);
224+
}
214225

215226
if (isNonEmptyArray(relatedInformation)) {
216-
hoverMessage.appendMarkdown('\n');
227+
hoverMessage.appendMarkdown(`\n`);
217228
for (const { message, resource, startLineNumber, startColumn } of relatedInformation) {
218229
hoverMessage.appendMarkdown(
219-
`* [${basename(resource.path)}(${startLineNumber}, ${startColumn})](${resource.toString(false)}#${startLineNumber},${startColumn}): `
230+
escape(`* [${basename(resource.path)}(${startLineNumber}, ${startColumn})](${resource.toString(false)}#${startLineNumber},${startColumn}): `)
220231
);
221-
hoverMessage.appendText(`${message}`);
222-
hoverMessage.appendMarkdown('\n');
232+
hoverMessage.appendText(`${escape(message)}`);
233+
hoverMessage.appendMarkdown(`\n`);
223234
}
224-
hoverMessage.appendMarkdown('\n');
235+
hoverMessage.appendMarkdown(`\n`);
225236
}
226237
}
227238

src/vs/editor/contrib/gotoError/gotoErrorWidget.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ class MessageWidget {
125125
const sourceElement = document.createElement('div');
126126
sourceElement.innerText = `[${source}] `;
127127
dom.addClass(sourceElement, 'source');
128+
this._editor.applyFontInfo(sourceElement);
128129
this._messageBlock.appendChild(sourceElement);
129130
}
130131
const messageElement = document.createElement('div');
@@ -135,6 +136,7 @@ class MessageWidget {
135136
const codeElement = document.createElement('div');
136137
codeElement.innerText = ` [${code}]`;
137138
dom.addClass(codeElement, 'code');
139+
this._editor.applyFontInfo(codeElement);
138140
this._messageBlock.appendChild(codeElement);
139141
}
140142

0 commit comments

Comments
 (0)