如何让VS Code语言扩展中文档注释内的括号生效括号对着色?
如何让VS Code对自定义语言文档注释中的@link大括号应用括号对颜色化?
我正在为Pawn语言制作TextMate语法以实现语法高亮,以下是文档注释中@link标签的规则代码:
{ "scopeName": "source.amx.pawn", "patterns": [ { "name": "comment.block.documentation.amx.pawn", "begin": "/\\*\\*(?!/)", "end": "\\*/", "patterns": [{ "include": "#docblock" }] }, // more patterns... ], "repository": { "docblock": { "patterns": [ { "match": "({)(@)(link|linkcode|linkplain)\\s+(\\w+)\\s+(.*)(})", "captures": { "1": { "name": "punctuation.definition.bracket.amx.pawn" }, "2": { "name": "punctuation.docblock.at.amx.pawn" }, "3": { "name": "storage.type.class.docblock.tag.amx.pawn" }, "4": { "name": "variable.other.docblock.link.amx.pawn" }, "5": { "name": "entity.name.type.instance.docblock.amx.pawn" }, "6": { "name": "punctuation.definition.bracket.amx.pawn" } } } ] }, // more stuff... } }
目前除大括号外,其他元素着色均正常,大括号仅显示指定的标点颜色。我期望VS Code能像处理TypeScript那样对其应用括号对颜色化,对比两者的TextMate作用域后未发现关键差异,请问如何实现相同效果?
解决方案
VS Code的括号对颜色化不仅依赖TextMate作用域,还需要确保括号被识别为配对符号,而非普通标点。以下是具体调整步骤:
调整大括号的作用域名称
VS Code优先识别通用的punctuation.definition.bracket作用域来启用括号对颜色化,而非带语言后缀的特定作用域。修改大括号的作用域,保留通用作用域作为主作用域,语言后缀作为次要作用域:"captures": { "1": { "name": "punctuation.definition.bracket punctuation.definition.bracket.amx.pawn" }, // ... 其他捕获项不变 "6": { "name": "punctuation.definition.bracket punctuation.definition.bracket.amx.pawn" } }单独匹配大括号,明确标记为配对项
若当前通过match匹配整个@link标签,VS Code可能无法单独识别大括号为配对结构。可以在docblock的patterns中添加单独的大括号匹配规则,放在@link规则之前:"docblock": { "patterns": [ { "match": "\\{|\\}", "name": "punctuation.definition.bracket punctuation.definition.bracket.amx.pawn" }, // 原有的@link匹配规则 { "match": "({)(@)(link|linkcode|linkplain)\\s+(\\w+)\\s+(.*)(})", "captures": { /* ... 原有配置 ... */ } } ] }这样能让VS Code更清晰地识别这是一对可配对的括号。
确认VS Code的括号配置
确保用户设置中editor.bracketPairColorization.enabled为true,同时在语言配置文件中明确指定该语言的括号对:"bracketPairs": [["{", "}"]]
内容的提问来源于stack exchange,提问作者Mis
相关产品推荐
相关产品推荐

