我可以使用 setMonarchTokensProvider 定义令牌,但这并没有真正的帮助,因为我只能创建一种新语言或覆盖打字稿。无论哪种情况,我都没有我仍然想要拥有的其余打字稿令牌。
我只想添加一个标记,该标记在此编辑器的上下文中具有特定含义,我想对其进行着色。同时仍然拥有所有打字稿。
这是我到目前为止所拥有的(取自操场示例),但是这样打字稿的其余部分就消失了:
monaco.languages.setMonarchTokensProvider('typescript', {
tokenizer: {
root: [
[/\pvm.*/, "custom-error"]
]
}
});
monaco.editor.defineTheme('myCoolTheme', {
base: 'vs',
inherit: true,
rules: [
{ token: 'custom-error', foreground: 'ff0000', fontStyle: 'bold' }
]
});
(然后在创建编辑器时使用主题 myCoolTheme)
我最终找到了语言 .js 文件并在其中添加了自定义内容。这不是我想要的方式,但它有效。
对于下一个尝试这样做的人,我建议使用
monaco.languages.registerDocumentSemanticTokensProvider
à la this blog post 并以这种方式向现有语言添加几个关键字。
但是,如果您确实想仅使用语法突出显示来扩展语言定义(根据文章,这比语义突出显示的计算成本要低),那么您需要从
'monaco-editor/esm/vs/basic-languages/<lang>/<lang>.js'
导入并使用 monaco.languages.setMonarchTokensProvider
。
通过包含“node_modules/monaco-editor/**/*”并搜索“.js”,您可以在 vscode 全局搜索中快速找到所需的文件