【问题标题】:swiftlint open brace ruleswiftlint 大括号规则
【发布时间】:2017-07-30 01:52:02
【问题描述】:

我正在使用 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[{]"(检查{之前是否有空格)。
  • @WiktorStribiżew 更新了我的问题。我想将包含 { 的行与前面的空格匹配。
  • 好,然后使用"\\S[{]"(或"\\S\\{")(注意,当用作字符串文字时,必须使用双转义符)。
  • @WiktorStribiżew 当我在regex101.com 中输入您的解决方案时,内容为:否则如果让 var1 = var1 as?字符串,!var1.isEmpty {。没有突出显示
  • 什么都不会,因为\S\{ 匹配.isEmpty{。您说只有在{ 之前有空格以外的任何内容时才需要匹配。请重新考虑您的要求,并更新您的问题。

标签: regex swift swiftlint


【解决方案1】:

您的 (\S+.*\{) 正则表达式匹配任何不是空格的字符(一个或多个重复 - \S+),然后匹配除换行符以外的任何字符(包括非空格 - 这是根本原因您的问题)和{

你可以使用

\S[ \t]+\{

请参阅regex demo

详情

  • \S - 任何非空白字符
  • [ \t]+ - 一个或多个 (+) horizo​​ntal whitesapces(可以替换为 [\t\p{Zs}]+,其中 \p{Zs} 匹配所有水平 Unicode 空白,不带制表符)。
  • \{ - 文字 { 符号。

【讨论】:

  • 非常感谢。付出的努力和解释都很棒!
猜你喜欢
  • 2019-10-15
  • 1970-01-01
  • 1970-01-01
  • 2020-09-06
  • 2017-11-03
  • 2013-04-15
  • 2016-07-22
  • 2017-02-01
  • 2018-10-01
相关资源
最近更新 更多