VSCode 扩展 API: 自动完成 documentation/detail 突出显示

VSCode extension API: autocomplete documentation/detail highlighting

已关闭 issue on GitHub 表示在自动完成详细信息中未启用语法突出显示。

这是没有突出显示的自动完成代码

vscode.languages.registerCompletionItemProvider('xml', {
        provideCompletionItems(document: vscode.TextDocument, position: vscode.Position, token: vscode.CancellationToken): Thenable<vscode.CompletionItem[]>
        {
            return new Promise<vscode.CompletionItem[]>((resolve, reject) =>
            {
                let ci = new vscode.CompletionItem("tag", vscode.CompletionItemKind.Snippet);
                ci.detail = "<Tag>detail</Tag>"
                ci.documentation = "<Tag>documentation</Tag>"
                ci.insertText = "<Tag></Tag>";
                resolve([ci]);
            });
        }
    }
);

这里是片段代码,提供了很好的亮点

"tag": {
    "prefix": "tag",
    "body": "<Tag>detail</Tag>",
    "description": "<Tag>description</Tag>"
}

那么真的没有办法像snippet中那样高亮动态补全内容吗?看起来很奇怪...

我认为你必须自己设计造型。下周 v1.61 即将发布时,您将能够使用 documentation 值(不支持 detail 样式):

const documentation = new vscode.MarkdownString(`<span style='color:#ff0;background-color:#000;'><Tag&gt;</span>
    documentation
    <span style='color:#ff0;background-color:#000;'></Tag&gt;</span>`);

documentation.supportHtml = true;  // new setting to be in v1.61

ci.documentation = documentation;

// I added this form if you want a tabstop at the [=10=]
ci.insertText = new vscode.SnippetString("<Tag>[=10=]</Tag>");

请注意,由于 vscode,出于安全原因,在 MarkdownString 中清理了 html,我只是将 <Tag> 上的结束 > 替换为 &gt;的。

另请注意,在字符串文字中,制表符和换行符当前已被删除 - 因此您可以在没有这么长的行的情况下使您的代码更具可读性。

演示: