Skip to content

Commit b2f53b4

Browse files
committed
#62370 Improve hover UI
1 parent f1a8646 commit b2f53b4

File tree

1 file changed

+23
-32
lines changed

1 file changed

+23
-32
lines changed

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

Lines changed: 23 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import { overviewRulerError, overviewRulerInfo, overviewRulerWarning } from 'vs/
2828
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
2929
import { IMarker, IMarkerService, MarkerSeverity, MarkerTag } from 'vs/platform/markers/common/markers';
3030
import { ThemeColor, themeColorFromId } from 'vs/platform/theme/common/themeService';
31+
import { localize } from 'vs/nls';
3132

3233
function MODEL_ID(resource: URI): string {
3334
return resource.toString();
@@ -197,44 +198,34 @@ class ModelMarkerHandler {
197198
// Disable markdown renderer sanitize to allow html
198199
// Hence, escape all input strings
199200
hoverMessage.sanitize = false;
200-
if (source) {
201-
hoverMessage.appendMarkdown(`<span style='opacity: 0.6'>[${escape(source)}]</span>`);
202-
hoverMessage.appendText(' ');
203-
}
204201

205-
hoverMessage.appendMarkdown(`<span style='font-family: Monaco, Menlo, Consolas, "Droid Sans Mono", "Inconsolata", "Courier New", monospace, "Droid Sans Fallback"; white-space: pre-wrap;'>`);
206-
message = escape(message.trim());
207-
const lines = message.split(/\r\n|\r|\n/g);
208-
if (lines.length > 1) {
209-
if (source) {
210-
hoverMessage.appendMarkdown(`</br>`);
211-
}
212-
for (const line of lines) {
213-
hoverMessage.appendText(line);
214-
hoverMessage.appendMarkdown(`</br>`);
215-
}
216-
} else {
217-
hoverMessage.appendText(message);
218-
}
219-
hoverMessage.appendMarkdown(`</span>`);
202+
hoverMessage.appendMarkdown(`<div style='font-family: Monaco, Menlo, Consolas, "Droid Sans Mono", "Inconsolata", "Courier New", monospace, "Droid Sans Fallback"; white-space: pre-wrap;'>`);
203+
hoverMessage.appendMarkdown(`<span>${escape(message.trim())}</span>`);
204+
hoverMessage.appendMarkdown(`</div>`);
220205

221-
if (code) {
222-
if (lines.length === 1) {
223-
hoverMessage.appendText(' ');
206+
if (isNonEmptyArray(relatedInformation)) {
207+
hoverMessage.appendMarkdown(`<ul>`);
208+
for (const { message, resource, startLineNumber, startColumn } of relatedInformation) {
209+
hoverMessage.appendMarkdown(`<li>`);
210+
hoverMessage.appendMarkdown(`<a href='#' data-href='${resource.toString(false)}#${startLineNumber},${startColumn}'>${escape(basename(resource.path))}(${startLineNumber}, ${startColumn})</a>`);
211+
hoverMessage.appendMarkdown(`<span>: ${escape(message)}</span>`);
212+
hoverMessage.appendMarkdown(`</li>`);
224213
}
225-
hoverMessage.appendMarkdown(`<span style='opacity: 0.6'>[${escape(code)}]</span>`);
214+
hoverMessage.appendMarkdown(`</ul>`);
226215
}
227216

228-
if (isNonEmptyArray(relatedInformation)) {
229-
hoverMessage.appendMarkdown(`\n`);
230-
for (const { message, resource, startLineNumber, startColumn } of relatedInformation) {
231-
hoverMessage.appendMarkdown(
232-
escape(`* [${basename(resource.path)}(${startLineNumber}, ${startColumn})](${resource.toString(false)}#${startLineNumber},${startColumn}): `)
233-
);
234-
hoverMessage.appendText(`${escape(message)}`);
235-
hoverMessage.appendMarkdown(`\n`);
217+
if (source || code) {
218+
hoverMessage.appendMarkdown(`<div style='margin-top: 4px'>`);
219+
if (source) {
220+
hoverMessage.appendMarkdown(`<span style='opacity: 0.6; padding-right:4px;'>${localize('source', "Source")}:</span><span>${escape(source)}</span>`);
221+
if (code) {
222+
hoverMessage.appendMarkdown(`<span style='padding-right:4px;'>,</span>`);
223+
}
224+
}
225+
if (code) {
226+
hoverMessage.appendMarkdown(`<span style='opacity: 0.6; padding-right:4px;'>${localize('code', "Code")}:</span><span>${escape(code)}</span>`);
236227
}
237-
hoverMessage.appendMarkdown(`\n`);
228+
hoverMessage.appendMarkdown(`</div>`);
238229
}
239230
}
240231

0 commit comments

Comments
 (0)