VSCode自定义语言扩展:变量与函数调用语法高亮问题求助
解决方案
修正变量声明的匹配规则
首先完善变量声明的正则,让它完整匹配let var(type)的结构,避免变量名后的括号被函数规则误匹配:
"identifier": { "name": "variable.other.cl", "match": "(?i:let)\\s*(\\b[a-zA-Z][a-zA-Z0-9]*\\b)\\s*\\(\\s*[a-zA-Z]+\\s*\\)", "captures": { "1": { "name": "variable.other.cl" } } }
说明
- 完整覆盖
let var(type)的全部内容,确保变量名被精准捕获,同时将括号内的类型部分纳入变量声明的匹配范围,阻断函数规则对这部分括号的匹配。 - 通过
captures明确标记变量名,保证语法高亮的准确性。
修正函数调用的匹配规则
调整函数调用的正则,通过前置条件限定,只匹配类成员访问(./->)或赋值语句后的函数调用:
"function-call": { "name": "entity.name.function.ekl", "match": "(?<=\\.|->|=\\s*)\\b([A-Za-z@!?][A-Za-z0-9@!?]*)\\s*\\(", "captures": { "1": { "name": "support.function.cl" } } }
说明
- 使用正向预查
(?<=\\.|->|=\\s*),限定函数名的前置场景:- 类成员访问运算符
.或->之后 - 赋值符号
=加任意空格之后
- 类成员访问运算符
- 这个规则会自动排除
let后变量名后的括号,因为这类场景不满足前置条件,彻底解决误匹配问题。
内容的提问来源于stack exchange,提问作者usmanharoon
相关产品推荐
相关产品推荐

