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

如何用SwiftLint规则强制顶级类型使用指定PSO前缀?

SwiftLint自定义规则:强制顶级类型以PSO为前缀

要实现仅对顶级作用域的class、struct、enum、protocol强制PSO前缀,同时兼容各类修饰符(如private、@Model、final等),可以通过以下自定义规则解决:

custom_rules:
  pso_prefix_rule:
    name: "PSO Prefix Rule"
    regex: '^(?=(?:\n|.)*?(?:(?:\{[^}]*\})*[^{}]*$))\s*(?:(?:private|public|internal|fileprivate|@Model|@objc|final|open|@Observable|@MainActor)\s*)*\b(class|struct|enum|protocol)\s+(?!PSO)'
    message: "Top-level classes, structs, enums, and protocols should start with a 'PSO' prefix."
    severity: warning
    multiline: true

规则解析

  1. 括号平衡预查:(?=(?:\n|.)*?(?:(?:\{[^}]*\})*[^{}]*$))
    核心逻辑,通过正向预查统计从文件开头到当前行的{和}数量,确保两者平衡(无未闭合大括号),以此判断当前类型处于顶级作用域,避免匹配嵌套类型。

  2. 修饰符兼容:\s*(?:(?:private|public|internal|fileprivate|@Model|@objc|final|open|@Observable|@MainActor)\s*)*
    匹配行首可选空白,以及任意数量的修饰符组合(可根据项目实际使用的修饰符补充列表),确保带修饰符的顶级类型能被正确匹配。

  3. 类型关键字匹配:\b(class|struct|enum|protocol)\s+
    用单词边界\b确保匹配完整的类型关键字,避免误匹配包含这些关键字的其他字符串。

  4. 前缀检查:(?!PSO)
    正向否定预查,确保类型名称不以PSO开头,触发规则警告。

验证示例

  • ✅ 触发警告:private class Test {}、@Model struct User {}、final enum Status {}
  • ❌ 不触发警告:class PSOUser {}、protocol PSOProtocol {}、顶级类型内部嵌套的enum Inner {}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:11:02