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

自定义SwiftLint规则问题:// MARK:前换行不足两行排查

关于SwiftLint自定义MARK规则的问题解答

1. SwiftLint是否有内置规则?

目前SwiftLint并没有内置的检测// MARK:前换行数量的规则,你需要通过自定义规则来实现这个需求,你的方向是对的。

2. 你的正则表达式问题在哪?

你写的([^\n\n]?\/\/ MARK:)存在两个关键问题:

  • 无效的字符集:[^\n\n]里重复的\n没有任何意义,正则字符集里重复的字符会被自动忽略,等价于[^\n]?——它只能匹配0个或1个非换行字符,无法检测前面的换行数量。
  • 逻辑覆盖不全:这个正则只能匹配// MARK:前面紧挨着非换行字符的情况(比如func foo() {}// MARK:),但完全漏掉了更常见的错误场景:比如代码行后只隔一个换行就写// MARK:(func foo() {}\n// MARK:),或者// MARK:直接出现在文件开头的情况。

3. 修正后的正则与规则配置

要实现“检测// MARK:前换行少于两行”的需求,我们需要用负向后瞻断言来判断// MARK:前面是否没有连续两个换行。同时注意在YAML配置里,反斜杠需要转义(写成\\):

custom_rules:
  pragma_mark:
    name: "Wrong pragma mark format"
    regex: "(?<!\\n\\n)\\/\\/ MARK:"
    message: "Please leave two lines before // MARK:"
    severity: warning

这个正则的逻辑是:匹配所有前面没有连续两个换行的// MARK:,包括:

  • 文件开头直接出现的// MARK:
  • 代码行后只隔一个换行就出现的// MARK:
  • 前面只有单个字符/空格的// MARK:

如果你的需求是允许// MARK:出现在文件开头(不需要警告),可以把正则调整为:

regex: "(?<!^\\n\\n)(?<!\\n\\n)\\/\\/ MARK:"

不过这个场景比较少见,根据你的需求选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:31:39