Skip to content

Commit ea5f5dc

Browse files
committed
Support HTML in DartDocs
Fixes #3782.
1 parent aa12484 commit ea5f5dc

5 files changed

Lines changed: 20 additions & 11 deletions

File tree

‎src/extension/analysis/analyzer_lsp.ts‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { DartSdks, Logger } from "../../shared/interfaces";
1313
import { CategoryLogger } from "../../shared/logging";
1414
import { PromiseCompleter } from "../../shared/utils";
1515
import { fsPath } from "../../shared/utils/fs";
16-
import { cleanDartdoc } from "../../shared/vscode/extension_utils";
16+
import { cleanDartdoc, createMarkdownString } from "../../shared/vscode/extension_utils";
1717
import { WorkspaceContext } from "../../shared/workspace";
1818
import { config } from "../config";
1919
import { DART_MODE } from "../extension";
@@ -64,7 +64,7 @@ export class LspAnalyzer extends Analyzer {
6464

6565
function cleanDocString<T extends MarkedString | MarkdownString | string>(input: T): T {
6666
if (input instanceof MarkdownString)
67-
return new MarkdownString(cleanDartdoc(input.value)) as T;
67+
return createMarkdownString(cleanDartdoc(input.value)) as T;
6868
else if (typeof input === "string")
6969
return cleanDartdoc(input) as T;
7070
else if (isLanguageValuePair(input))
@@ -334,6 +334,9 @@ function createClient(logger: Logger, sdks: DartSdks, dartCapabilities: DartCapa
334334
outline: true,
335335
suggestFromUnimportedLibraries: config.autoImportCompletions,
336336
},
337+
markdown: {
338+
supportHtml: true,
339+
},
337340
middleware,
338341
outputChannelName: "LSP",
339342
uriConverters: {

‎src/extension/providers/dart_completion_item_provider.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
/* eslint-disable no-underscore-dangle */
22
import * as path from "path";
33
import * as vs from "vscode";
4-
import { CancellationToken, CompletionContext, CompletionItem, CompletionItemKind, CompletionItemProvider, CompletionList, CompletionTriggerKind, Disposable, MarkdownString, Position, Range, SnippetString, TextDocument } from "vscode";
4+
import { CancellationToken, CompletionContext, CompletionItem, CompletionItemKind, CompletionItemProvider, CompletionList, CompletionTriggerKind, Disposable, Position, Range, SnippetString, TextDocument } from "vscode";
55
import * as as from "../../shared/analysis_server_types";
66
import { IAmDisposable, Logger } from "../../shared/interfaces";
77
import { disposeAll, flatMap } from "../../shared/utils";
88
import { fsPath } from "../../shared/utils/fs";
99
import { resolvedPromise } from "../../shared/utils/promises";
10-
import { cleanDartdoc } from "../../shared/vscode/extension_utils";
10+
import { cleanDartdoc, createMarkdownString } from "../../shared/vscode/extension_utils";
1111
import { DelayedCompletionItem, LazyCompletionItem } from "../../shared/vscode/interfaces";
1212
import { DasAnalyzerClient } from "../analysis/analyzer_das";
1313
import { hasOverlappingEdits } from "../commands/edit_das";
@@ -512,7 +512,7 @@ export class DartCompletionItemProvider implements CompletionItemProvider, IAmDi
512512
if (suggestion.isDeprecated)
513513
completion.tags = [vs.CompletionItemTag.Deprecated];
514514
completion.detail = detail;
515-
completion._documentation = docs ? new MarkdownString(docs) : undefined;
515+
completion._documentation = docs ? createMarkdownString(docs) : undefined;
516516
completion.insertText = completionText;
517517
completion.keepWhitespace = true;
518518
completion.range = {

‎src/extension/providers/dart_signature_help_provider.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as vs from "vscode";
22
import { AnalysisGetSignatureResponse, ParameterInfo } from "../../shared/analysis_server_types";
33
import { fsPath } from "../../shared/utils/fs";
4-
import { cleanDartdoc } from "../../shared/vscode/extension_utils";
4+
import { cleanDartdoc, createMarkdownString } from "../../shared/vscode/extension_utils";
55
import { DasAnalyzerClient } from "../analysis/analyzer_das";
66

77
export class DartSignatureHelpProvider implements vs.SignatureHelpProvider {
@@ -17,7 +17,7 @@ export class DartSignatureHelpProvider implements vs.SignatureHelpProvider {
1717
if (token && token.isCancellationRequested)
1818
return undefined;
1919

20-
const sig = new vs.SignatureInformation(this.getSignatureLabel(resp), new vs.MarkdownString(cleanDartdoc(resp.dartdoc)));
20+
const sig = new vs.SignatureInformation(this.getSignatureLabel(resp), createMarkdownString(cleanDartdoc(resp.dartdoc)));
2121
sig.parameters = resp.parameters.map((p) => new vs.ParameterInformation(this.getLabel(p)));
2222

2323
const sigs = new vs.SignatureHelp();

‎src/extension/providers/snippet_completion_item_provider.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as path from "path";
2-
import { CancellationToken, CompletionContext, CompletionItem, CompletionItemKind, CompletionItemProvider, CompletionList, MarkdownString, Position, SnippetString, TextDocument, Uri } from "vscode";
2+
import { CancellationToken, CompletionContext, CompletionItem, CompletionItemKind, CompletionItemProvider, CompletionList, Position, SnippetString, TextDocument, Uri } from "vscode";
33
import { DartCapabilities } from "../../shared/capabilities/dart";
4-
import { extensionPath, readJson } from "../../shared/vscode/extension_utils";
4+
import { createMarkdownString, extensionPath, readJson } from "../../shared/vscode/extension_utils";
55
import { config } from "../config";
66

77
export class SnippetCompletionItemProvider implements CompletionItemProvider {
@@ -22,7 +22,7 @@ export class SnippetCompletionItemProvider implements CompletionItemProvider {
2222
: snippet.body,
2323
);
2424
completionItem.detail = snippet.description;
25-
completionItem.documentation = new MarkdownString().appendCodeblock(completionItem.insertText.value);
25+
completionItem.documentation = createMarkdownString("").appendCodeblock(completionItem.insertText.value);
2626
completionItem.sortText = "zzzzzzzzzzzzzzzzzzzzzz";
2727
this.completions.items.push(completionItem);
2828
}

‎src/shared/vscode/extension_utils.ts‎

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as fs from "fs";
22
import * as path from "path";
3-
import { extensions, Uri } from "vscode";
3+
import { extensions, MarkdownString, Uri } from "vscode";
44
import { dartCodeExtensionIdentifier, flutterExtensionIdentifier } from "../constants";
55
import * as dartdoc from "../utils/dartdocs";
66

@@ -43,3 +43,9 @@ export function checkHasFlutterExtension() {
4343
export function cleanDartdoc(doc: string | undefined) {
4444
return dartdoc.cleanDartdoc(doc, docsIconPathFormat);
4545
}
46+
47+
export function createMarkdownString(doc: string) {
48+
const md = new MarkdownString(doc);
49+
md.supportHtml = true;
50+
return md;
51+
}

0 commit comments

Comments
 (0)