我正在为 vscode 开发语言扩展。我定义了一个 tmLanguage 文件,一切正常。在悬停功能中,使用vscode.MarkdownString.appendCodeblock()
markdown 被正确解释,并且我的自定义语言的语法突出显示开箱即用,通过执行以下操作:
const content = new MarkdownString("", true)
content.appendMarkdown("## Examples: \n")
content.appendCodeblock(examples, "lmps")
其中examples
包含我的自定义语言的一些示例代码,并且"lmps"
是我的语言标识符。(示例图像悬停)
我想知道是否有办法在 webview 中实现相同的目标。我成功地content
在 webview 中显示,将 markdownString 编译成 html:
async function set_doc_panel_content(panel: DocPanel | undefined, md_content: vscode.MarkdownString) {
const html: string = await vscode.commands.executeCommand('markdown.api.render', md_content.value) as string;
panel!.webview.html = html;
}
到目前为止一切都很好,但是通过这种方式,markdown 不知道我的自定义语言并且不做任何语法高亮。(示例图片 Webview)现在,我了解到可以通过在激活函数中返回一个对象来贡献一个 markdown-it 插件,从而为 Markdown 扩展添加语言支持。
export function activate(context: vscode.ExtensionContext) {
...
return {
extendMarkdownIt(md: any) {
return md.use(require('markdown-it-emoji'));
}
}
但是,如果我没看错的话,这实际上需要开发一个专用的 markdown-it 插件。我想知道是否有更简单的方法可以将我的语言集成到 markdown api 中。因为 vscode 显然已经可以在悬停和完成建议中原生地做到这一点。我可以在 webview 中以某种方式使用此功能吗?或者,有没有一种方法可以从 tmLanguage 文件生成 markdown-it 插件,而无需深入学习 markdown-it 插件开发?也许有人有指向完成类似事情的项目的指针?