diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index 8d3b6988fb1..d655abe4e72 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -274,6 +274,12 @@ export interface ISerializedSignatureHelpProviderMetadata { readonly retriggerCharacters: ReadonlyArray; } +export interface IMarkdownStringDto { + isTrusted: boolean; + value: string; + uris: { [n: string]: UriComponents }; +} + export interface MainThreadLanguageFeaturesShape extends IDisposable { $unregister(handle: number): void; $registerOutlineSupport(handle: number, selector: ISerializedDocumentFilter[], extensionId: string): void; diff --git a/src/vs/workbench/api/node/extHostLanguageFeatures.ts b/src/vs/workbench/api/node/extHostLanguageFeatures.ts index fd9a617a2e2..1d1608d34c9 100644 --- a/src/vs/workbench/api/node/extHostLanguageFeatures.ts +++ b/src/vs/workbench/api/node/extHostLanguageFeatures.ts @@ -664,7 +664,7 @@ class SuggestAdapter { label: item.label, kind: typeConvert.CompletionItemKind.from(item.kind), detail: item.detail, - documentation: item.documentation, + documentation: typeConvert.MarkdownString.from(item.documentation), filterText: item.filterText, sortText: item.sortText, preselect: item.preselect, diff --git a/src/vs/workbench/api/node/extHostTypeConverters.ts b/src/vs/workbench/api/node/extHostTypeConverters.ts index de2d33911d8..7db09363924 100644 --- a/src/vs/workbench/api/node/extHostTypeConverters.ts +++ b/src/vs/workbench/api/node/extHostTypeConverters.ts @@ -19,11 +19,12 @@ import { IRange } from 'vs/editor/common/core/range'; import { ISelection } from 'vs/editor/common/core/selection'; import * as htmlContent from 'vs/base/common/htmlContent'; import * as languageSelector from 'vs/editor/common/modes/languageSelector'; -import { WorkspaceEditDto, ResourceTextEditDto, ResourceFileEditDto } from 'vs/workbench/api/node/extHost.protocol'; +import { WorkspaceEditDto, ResourceTextEditDto, ResourceFileEditDto, IMarkdownStringDto } from 'vs/workbench/api/node/extHost.protocol'; import { MarkerSeverity, IRelatedInformation, IMarkerData, MarkerTag } from 'vs/platform/markers/common/markers'; import { ACTIVE_GROUP, SIDE_GROUP } from 'vs/workbench/services/editor/common/editorService'; import { ExtHostDocumentsAndEditors } from 'vs/workbench/api/node/extHostDocumentsAndEditors'; import { isString, isNumber } from 'vs/base/common/types'; +import * as marked from 'vs/base/common/marked/marked'; export interface PositionLike { line: number; @@ -220,6 +221,29 @@ export namespace MarkdownString { return { value: '' }; } } + + export function from2(markup: vscode.MarkedString | vscode.MarkdownString): IMarkdownStringDto { + let { value, isTrusted } = from(markup); + + let uris = Object.create(null); + let renderer = new marked.Renderer(); + + renderer.image = renderer.link = (href: string): string => { + try { + uris[href] = URI.parse(href, true); + } catch (e) { + // ignore + } + return ''; + }; + marked(value, { renderer }); + return { + isTrusted, + value, + uris + }; + } + export function to(value: htmlContent.IMarkdownString): vscode.MarkdownString { const ret = new htmlContent.MarkdownString(value.value); ret.isTrusted = value.isTrusted;