VSCode自定义脚本语言扩展:如何忽略字符串内的括号高亮?
解决VSCode扩展中字符串内括号配对着色的问题
你的问题出在当前language-configuration.json的brackets配置仅定义了括号对,但未指定哪些语境下要忽略这些括号的配对逻辑。VSCode的括号配对着色依赖语法token识别上下文,只要正确标记字符串区域并给括号对添加排除规则就能解决。
修改步骤:
确认语法文件的字符串标记
先确保你的语言语法定义文件(比如syntaxes目录下的.tmLanguage.json文件),已经将单引号、双引号、反引号包裹的内容正确标记为string类型的token。这是VSCode识别字符串上下文的基础,若这一步出错,后续配置不会生效。更新language-configuration.json的brackets配置
给每个括号对添加notIn属性,指定在string和comment语境下不启用括号配对。修改后的brackets部分如下:"brackets": [ ["{", "}", {"notIn": ["string", "comment"]}], ["[", "]", {"notIn": ["string", "comment"]}], ["(", ")", {"notIn": ["string", "comment"]}] ],完整修改后配置
替换原文件中的brackets部分,最终的language-configuration.json如下:{ "brackets": [ ["{", "}", {"notIn": ["string", "comment"]}], ["[", "]", {"notIn": ["string", "comment"]}], ["(", ")", {"notIn": ["string", "comment"]}] ], "autoClosingPairs": [ { "open": "{", "close": "}" }, { "open": "[", "close": "]" }, { "open": "(", "close": ")" }, { "open": "'", "close": "'", "notIn": [ "string", "comment" ] }, { "open": "\"", "close": "\"", "notIn": [ "string" ] }, { "open": "`", "close": "`", "notIn": [ "string", "comment" ] }, { "open": "/**", "close": " */", "notIn": [ "string" ] } ], "surroundingPairs": [ ["{", "}"], ["[", "]"], ["(", ")"], ["'", "'"], ["\"", "\""], ["`", "`"] ] }
原理说明
添加notIn属性后,VSCode会检查当前括号所在的token语境,若属于string或comment类型,就会跳过括号配对的着色逻辑,字符串内的括号也就不会被错误识别为需要配对的括号了。
内容的提问来源于stack exchange,提问作者tguichaoua
相关产品推荐
相关产品推荐

