【问题标题】:SwiftLint Rule for Braces on next line but with some exceptions下一行大括号的 SwiftLint 规则,但有一些例外
【发布时间】:2019-10-15 16:26:08
【问题描述】:

我想修改.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 }
}

如何更改我的正则表达式以允许单行 getter/setter 使用同一行?

【问题讨论】:

    标签: swift regex swiftlint


    【解决方案1】:

    我建议使用

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

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

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

    请参阅regex demo(或this one)。

    详情

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

    【讨论】:

    • 感谢您的解决方案!这似乎适用于大多数情况。我仍然收到一些警告Opening Braces not on Next Line Violation: Opening braces should be placed on the next line. (opening_brace),它们只是指向源文件的第一行。知道为什么会发生这种情况吗?
    • @BadmintonCat 不知道,如果你可以分享一些示例文件文本(通过 pastebin?)我可以尝试调试正则表达式,但这里可能没有正则表达式问题,其他一些规则设置可能在故障。
    • 你是对的!我已将受影响的类复制到您的演示 sn-p 中,它看起来很好。一定是别的东西。
    猜你喜欢
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 2023-04-03
    • 1970-01-01
    • 2014-04-24
    相关资源
    最近更新 更多