|
3 | 3 | * Licensed under the MIT License. See License.txt in the project root for license information.
|
4 | 4 | *--------------------------------------------------------------------------------------------*/
|
5 | 5 |
|
6 |
| -import * as nls from 'vs/nls'; |
7 | 6 | import { isNonEmptyArray } from 'vs/base/common/arrays';
|
8 | 7 | import { Emitter, Event } from 'vs/base/common/event';
|
9 | 8 | import { MarkdownString } from 'vs/base/common/htmlContent';
|
| 9 | +import { escape } from 'vs/base/common/strings'; |
10 | 10 | import { Disposable, IDisposable, dispose } from 'vs/base/common/lifecycle';
|
11 | 11 | import * as network from 'vs/base/common/network';
|
12 | 12 | import { basename } from 'vs/base/common/paths';
|
@@ -192,36 +192,47 @@ class ModelMarkerHandler {
|
192 | 192 | let { message, source, relatedInformation, code } = marker;
|
193 | 193 |
|
194 | 194 | if (typeof message === 'string') {
|
195 |
| - message = message.trim(); |
196 | 195 |
|
| 196 | + hoverMessage = new MarkdownString(); |
| 197 | + // Disable markdown renderer sanitize to allow html |
| 198 | + // Hence, escape all input strings |
| 199 | + hoverMessage.sanitize = false; |
197 | 200 | 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>`); |
210 | 210 | }
|
| 211 | + for (const line of lines) { |
| 212 | + hoverMessage.appendText(line); |
| 213 | + hoverMessage.appendMarkdown(`</br>`); |
| 214 | + } |
| 215 | + } else { |
| 216 | + hoverMessage.appendText(message); |
211 | 217 | }
|
212 | 218 |
|
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 | + } |
214 | 225 |
|
215 | 226 | if (isNonEmptyArray(relatedInformation)) {
|
216 |
| - hoverMessage.appendMarkdown('\n'); |
| 227 | + hoverMessage.appendMarkdown(`\n`); |
217 | 228 | for (const { message, resource, startLineNumber, startColumn } of relatedInformation) {
|
218 | 229 | 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}): `) |
220 | 231 | );
|
221 |
| - hoverMessage.appendText(`${message}`); |
222 |
| - hoverMessage.appendMarkdown('\n'); |
| 232 | + hoverMessage.appendText(`${escape(message)}`); |
| 233 | + hoverMessage.appendMarkdown(`\n`); |
223 | 234 | }
|
224 |
| - hoverMessage.appendMarkdown('\n'); |
| 235 | + hoverMessage.appendMarkdown(`\n`); |
225 | 236 | }
|
226 | 237 | }
|
227 | 238 |
|
|
0 commit comments