Skip to content

Commit 0b99867

Browse files
committed
working on markdown string dto
1 parent c155597 commit 0b99867

3 files changed

Lines changed: 32 additions & 2 deletions

File tree

src/vs/workbench/api/node/extHost.protocol.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,12 @@ export interface ISerializedSignatureHelpProviderMetadata {
274274
readonly retriggerCharacters: ReadonlyArray<string>;
275275
}
276276

277+
export interface IMarkdownStringDto {
278+
isTrusted: boolean;
279+
value: string;
280+
uris: { [n: string]: UriComponents };
281+
}
282+
277283
export interface MainThreadLanguageFeaturesShape extends IDisposable {
278284
$unregister(handle: number): void;
279285
$registerOutlineSupport(handle: number, selector: ISerializedDocumentFilter[], extensionId: string): void;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -664,7 +664,7 @@ class SuggestAdapter {
664664
label: item.label,
665665
kind: typeConvert.CompletionItemKind.from(item.kind),
666666
detail: item.detail,
667-
documentation: item.documentation,
667+
documentation: typeConvert.MarkdownString.from(item.documentation),
668668
filterText: item.filterText,
669669
sortText: item.sortText,
670670
preselect: item.preselect,

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

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,12 @@ import { IRange } from 'vs/editor/common/core/range';
1919
import { ISelection } from 'vs/editor/common/core/selection';
2020
import * as htmlContent from 'vs/base/common/htmlContent';
2121
import * as languageSelector from 'vs/editor/common/modes/languageSelector';
22-
import { WorkspaceEditDto, ResourceTextEditDto, ResourceFileEditDto } from 'vs/workbench/api/node/extHost.protocol';
22+
import { WorkspaceEditDto, ResourceTextEditDto, ResourceFileEditDto, IMarkdownStringDto } from 'vs/workbench/api/node/extHost.protocol';
2323
import { MarkerSeverity, IRelatedInformation, IMarkerData, MarkerTag } from 'vs/platform/markers/common/markers';
2424
import { ACTIVE_GROUP, SIDE_GROUP } from 'vs/workbench/services/editor/common/editorService';
2525
import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/node/extHostDocumentsAndEditors';
2626
import { isString, isNumber } from 'vs/base/common/types';
27+
import * as marked from 'vs/base/common/marked/marked';
2728

2829
export interface PositionLike {
2930
line: number;
@@ -220,6 +221,29 @@ export namespace MarkdownString {
220221
return { value: '' };
221222
}
222223
}
224+
225+
export function from2(markup: vscode.MarkedString | vscode.MarkdownString): IMarkdownStringDto {
226+
let { value, isTrusted } = from(markup);
227+
228+
let uris = Object.create(null);
229+
let renderer = new marked.Renderer();
230+
231+
renderer.image = renderer.link = (href: string): string => {
232+
try {
233+
uris[href] = URI.parse(href, true);
234+
} catch (e) {
235+
// ignore
236+
}
237+
return '';
238+
};
239+
marked(value, { renderer });
240+
return {
241+
isTrusted,
242+
value,
243+
uris
244+
};
245+
}
246+
223247
export function to(value: htmlContent.IMarkdownString): vscode.MarkdownString {
224248
const ret = new htmlContent.MarkdownString(value.value);
225249
ret.isTrusted = value.isTrusted;

0 commit comments

Comments
 (0)