You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftLint自定义类/结构体等声明后空行校验规则不生效问题

问题原因&解决方案

你的SwiftLint自定义规则不触发是由两个核心配置错误导致的,修正方法如下:

核心问题说明

  1. 未开启多行匹配模式:SwiftLint 底层使用的NSRegularExpression默认不会将$识别为每行的结尾,只会匹配整个校验文本的首尾,你原正则中的{$\n逻辑完全无法匹配到行尾的大括号+换行,自然不会触发规则。
  2. 断言逻辑错误:原正则的(?!\s)表示换行后的第一个字符不能是空白,但实际Swift代码中类型大括号后的内容通常有缩进(开头为空格/制表符),这种情况下就算没有空行也无法匹配到规则。

修正后的配置

直接替换你的自定义规则配置即可:

custom_rules:
  space_after_main_type:
    name: "No space after main type"
    regex: '(class|struct|enum|extension)\b[^\n]*\{\n(?!\s*$)'
    regex_options:
      - multiline
    message: "Empty line required after main declarations"
    severity: warning

规则逻辑说明

  • 新增multiline选项开启多行匹配,让$可以识别每行的结尾
  • 加入单词边界\b避免匹配到变量名中包含class/struct等关键字的异常场景
  • 负向先行断言(?!\s*$)表示大括号换行后的行不能是全空白行,完美匹配"大括号后无空行就触发"的需求,同时兼容缩进场景
  • 正则开头仅匹配class/struct/enum/extension四类声明,不会误触发func等其他声明的校验

内容的提问来源于stack exchange,提问作者Jax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:24:03