Skip to content

Commit beb033f

Browse files
committed
make internal variant of MarkedString be a string, microsoft#29076
1 parent f3bf53f commit beb033f

6 files changed

Lines changed: 29 additions & 61 deletions

File tree

src/vs/base/browser/htmlContentRenderer.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,7 @@ export function renderMarkedString(markedString: MarkedString, options: RenderOp
3535
// this is sort of legacy given that we have full
3636
// support for markdown. Turn this into markdown
3737
// and continue
38-
let markdown: string;
39-
if (typeof markedString === 'string') {
40-
markdown = markedString;
41-
} else {
42-
markdown = '```' + markedString.language + '\n' + markedString.value + '\n```';
43-
}
44-
return renderMarkdown(markdown, options);
38+
return renderMarkdown(markedString, options);
4539
}
4640

4741
export function renderText(text: string, options: RenderOptions = {}): Node {

src/vs/base/common/htmlContent.ts

Lines changed: 9 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -5,61 +5,27 @@
55

66
'use strict';
77

8+
import { equals } from 'vs/base/common/arrays';
9+
810
/**
911
* MarkedString can be used to render human readable text. It is either a markdown string
1012
* or a code-block that provides a language and a code snippet. Note that
1113
* markdown strings will be sanitized - that means html will be escaped.
1214
*/
13-
export type MarkedString = string | { readonly language: string; readonly value: string };
15+
export type MarkedString = string;
1416

1517
export function markedStringsEquals(a: MarkedString | MarkedString[], b: MarkedString | MarkedString[]): boolean {
1618
if (!a && !b) {
1719
return true;
18-
}
19-
if (!a || !b) {
20+
} else if (!a || !b) {
2021
return false;
21-
}
22-
23-
if (Array.isArray(a)) {
24-
if (!Array.isArray(b)) {
25-
return false;
26-
}
27-
return markedStringArrEquals(a, b);
28-
}
29-
return markedStringEqual(a, b as MarkedString);
30-
}
31-
32-
33-
function markedStringArrEquals(a: MarkedString[], b: MarkedString[]): boolean {
34-
let aLen = a.length,
35-
bLen = b.length;
36-
37-
if (aLen !== bLen) {
22+
} else if (typeof a === 'string' && typeof b === 'string') {
23+
return a === b;
24+
} else if (Array.isArray(a) && Array.isArray(b)) {
25+
return equals(a, b);
26+
} else {
3827
return false;
3928
}
40-
41-
for (let i = 0; i < aLen; i++) {
42-
if (!markedStringEqual(a[i], b[i])) {
43-
return false;
44-
}
45-
}
46-
47-
return true;
48-
}
49-
function markedStringEqual(a: MarkedString, b: MarkedString): boolean {
50-
if (!a && !b) {
51-
return true;
52-
}
53-
if (!a || !b) {
54-
return false;
55-
}
56-
if (typeof a === 'string' || typeof b === 'string') {
57-
return typeof a === 'string' && typeof b === 'string' && a === b;
58-
}
59-
return (
60-
a.language === b.language
61-
&& a.value === b.value
62-
);
6329
}
6430

6531
export function textToMarkedString(text: string): MarkedString {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ class ModelMarkerHandler {
150150
}
151151
}
152152

153-
hoverMessage = [{ language: '_', value: message }];
153+
hoverMessage = ['```_\n' + message + '\n```'];
154154
}
155155

156156
return {

src/vs/editor/contrib/goToDeclaration/browser/goToDeclarationMouse.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -154,10 +154,10 @@ class GotoDefinitionWithMouseEditorContribution implements editorCommon.IEditorC
154154
const previewRange = new Range(startLineNumber, 1, endLineNumber + 1, 1);
155155
const value = textEditorModel.getValueInRange(previewRange).replace(new RegExp(`^\\s{${minIndent - 1}}`, 'gm'), '').trim();
156156

157-
this.addDecoration(new Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn), {
158-
language: this.modeService.getModeIdByFilenameOrFirstLine(textEditorModel.uri.fsPath),
159-
value
160-
});
157+
this.addDecoration(
158+
new Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn),
159+
'```' + this.modeService.getModeIdByFilenameOrFirstLine(textEditorModel.uri.fsPath) + '\n' + value + '\n```'
160+
);
161161
ref.dispose();
162162
});
163163
}

src/vs/monaco.d.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -358,10 +358,7 @@ declare module monaco {
358358
* or a code-block that provides a language and a code snippet. Note that
359359
* markdown strings will be sanitized - that means html will be escaped.
360360
*/
361-
export type MarkedString = string | {
362-
readonly language: string;
363-
readonly value: string;
364-
};
361+
export type MarkedString = string;
365362

366363
export interface IKeyboardEvent {
367364
readonly browserEvent: KeyboardEvent;

src/vs/workbench/api/node/extHostTypeConverters.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,12 +143,23 @@ function isDecorationOptionsArr(something: vscode.Range[] | vscode.DecorationOpt
143143
return isDecorationOptions(something[0]) ? true : false;
144144
}
145145

146+
export namespace MarkedString {
147+
export function from(markup: vscode.MarkedString): string {
148+
if (typeof markup === 'string' || !markup) {
149+
return <string>markup;
150+
} else {
151+
const { language, value } = markup;
152+
return '```' + language + '\n' + value + '\n```';
153+
}
154+
}
155+
}
156+
146157
export function fromRangeOrRangeWithMessage(ranges: vscode.Range[] | vscode.DecorationOptions[]): IDecorationOptions[] {
147158
if (isDecorationOptionsArr(ranges)) {
148159
return ranges.map((r): IDecorationOptions => {
149160
return {
150161
range: fromRange(r.range),
151-
hoverMessage: r.hoverMessage,
162+
hoverMessage: Array.isArray(r.hoverMessage) ? r.hoverMessage.map(MarkedString.from) : MarkedString.from(r.hoverMessage),
152163
renderOptions: <any> /* URI vs Uri */r.renderOptions
153164
};
154165
});
@@ -256,7 +267,7 @@ export const location = {
256267
export function fromHover(hover: vscode.Hover): modes.Hover {
257268
return <modes.Hover>{
258269
range: fromRange(hover.range),
259-
contents: hover.contents
270+
contents: hover.contents.map(MarkedString.from)
260271
};
261272
}
262273

0 commit comments

Comments
 (0)