SwiftLint大括号规则

4

我正在使用Swiftlint来执行一些我们代码库中的实践。我想添加一个自定义规则,确保在换行符后始终出现{。我以为我懂得正则表达式,但似乎无法弄清楚。我只检查一行中是否包含除空格以外的任何字符,然后是{。在{后面可以有其他的内容。

我的现有代码:

invalid_open_brace:
    name: "Open brace should start on its own line"
    regex: "(\S+.*\{)"
    message: "Open brace should start on its own line"
    severity: warning

以下是一些应该匹配和不应该匹配的示例字符串:

// NO MATCH
else if let var1 = var1 as? String, !var1.isEmpty 
{

//NO MATCH
class Person
{
    // MATCH
    int() 
    {
    }

    // NO MATCH
    function() 
    {

    }
 }

// MATCH
function() {

}

{之前除了\S字符,你需要使用"\\s[{]"(检查是否有空格在{之前)。 - Wiktor Stribiżew
@WiktorStribiżew 我更新了我的问题。我想匹配包含 { 的行,这些行在它们之前有一些非空格字符。 - Haagenti
好的,那么请使用 "\\S[{]"(或 "\\S\\{")(请注意,在作为字符串文字使用时需要双重转义)。 - Wiktor Stribiżew
但是我的问题还不够清楚。我想匹配 {,但它们不能是换行符。因此,开放的大括号应该在一个新行上,而不是在 isEmpty 之后。 - Haagenti
那么有哪些要求呢?!var1.isEmpty<LBR>{Person<LBR>{之间有什么区别?为什么第一个不匹配而第二个应该匹配? - Wiktor Stribiżew
显示剩余6条评论
1个回答

4
你的(\S+.*\{)正则表达式匹配任何非空格字符(一个或多个重复-\S+),然后匹配除了换行符之外的任何字符(包括非空白字符-这是你问题的根本原因),以及{
你可以使用:
\S[ \t]+\{

请查看正则表达式演示

详细信息:

  • \S - 任何非空格字符
  • [ \t]+ - 一个或多个 (+) 水平 空格(可以用 [\t\p{Zs}]+ 替换,其中 \p{Zs} 匹配所有水平的 Unicode 空格而不是制表符)。
  • \{ - 一个字面上的 { 符号。

1
非常感谢。付出的努力和解释都很棒! - Haagenti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接