SwiftLint Rule for Braces 在下一行,但有一些例外

SwiftLint Rule for Braces on next line but with some exceptions

我想修改 .swiftlint.yml 以添加一些自定义规则以在下一行强制使用大括号。这对我有用...

  opening_braces:
    name: "Opening Braces not on Next Line"
    message: "Opening braces should be placed on the next line."
    include: "*.swift"
    regex: '\S[ \t]*\{'
    severity: warning

然而,在某些情况下,我希望允许在同一行上使用大括号,例如像这样:

override var cornerRadius: CGFloat
{
    get { return layer.cornerRadius }
    set { layer.cornerRadius = newValue }
}

如何更改我的正则表达式以允许一行为同一行 getters/setters?

我建议使用

regex: '^(?![ \t]*[sg]et[ \t]+\{.*\}).*\S[ \t]*\{'

或者,它的替代方案 \h 匹配水平空白:

regex: '^(?!\h*[sg]et\h+\{.*\}).*\S\h*\{'

参见 regex demo (or this one)。

详情

  • ^ - 字符串开头
  • (?!\h*[sg]et\h+\{.*\}) - 字符串中不应紧跟的位置
    • \h* - 0+ 水平空格
    • [sg]et - setget
    • \h+ - 1+ 水平空格
    • \{.*\} - {,任何 0+ 个字符,尽可能多,以及 }
  • .* - 任何 0+ 个字符,尽可能多
  • \S - 一个 non-whitespace 字符
  • \h* - 0+ 水平空格
  • \{ - 一个 { 字符。