部分自定义SwiftLint规则提示‘配置无效’的原因排查
SwiftLint自定义规则“无效配置”问题排查
执行SwiftLint时控制台提示以下三个规则存在“无效配置”,但规则仍能正常工作:commented_out_code、avoid_multiline_comment_markers、avoid_background_color。对应的配置代码如下:
commented_out_code: regex: '(?<!:|\/)\/\/\h*[a-z.](?!wiftlint)' message: "Comment starting with lowercase letter - did you forget to delete old code?" avoid_multiline_comment_markers: regex: '*/' message: "Avoid using multi-line comment markers like */ and /* - use // and /// instead." avoid_background_color: regex: '.background(Color.' message: "Avoid using .background(Color), use .backgroundColor() instead."
其中avoid_background_color为自定义规则,另外两个是SwiftLint内置规则。对比验证有效的自定义规则示例:
use_int_zero_property_in_single_check: regex: ' == 0[^( {)]' message: "Avoid checking for '0' in single check, use '== .zero' instead."
问题分析及修复方案
1. commented_out_code规则
- 问题:该规则是SwiftLint内置规则,若将其放在
custom_rules块中配置会触发无效提示;同时正则中的\/属于不必要转义(YAML单引号内无需转义/,且正则中/不是元字符)。 - 修复:
- 若要修改内置规则参数,需在配置文件顶层定义(而非
custom_rules下); - 修正正则:将
(?<!:|\/)改为(?<!:|/),最终正则为'(?<!:|/)//\h*[a-z.](?!wiftlint)'。
- 若要修改内置规则参数,需在配置文件顶层定义(而非
2. avoid_multiline_comment_markers规则
- 问题:正则中的
*是正则元字符(表示匹配前导字符零次或多次),但你需要匹配字面量的*,未转义会导致正则语法错误,触发无效配置提示。 - 修复:转义正则中的
*,将regex: '*/'改为regex: '\*\/'(匹配字面量的*/)。若该规则是内置规则,同样需移至配置顶层定义。
3. avoid_background_color规则
- 问题:正则中的
.和(都是正则元字符(.匹配任意字符,(用于分组),未转义会导致正则匹配逻辑偏离预期,同时触发语法错误提示。 - 修复:转义所有元字符,将
regex: '.background(Color.'改为regex: '\.background\(Color\.'。
内容的提问来源于stack exchange,提问作者matthias_code
相关产品推荐
相关产品推荐

