【问题标题】:How to match only top level objects in swiftlint如何仅匹配 swiftlint 中的顶级对象
【发布时间】:2017-06-09 13:40:35
【问题描述】:

我们有一个 swiftlint 规则,它基本上在我们的结构、类和协议(DC、DB 或 DM 取决于功能)上强制使用前缀。我们只想将其与顶级对象匹配,例如在下面的示例中,我只希望 TopLevelSecondTopLevel 抛出错误:

class TopLevel {

    struct NotTopLevel {
        var test
    }

}

class SecondTopLevel {

}

我们当前的正则表达式如下:(struct|class|protocol)\s(?!(func|DB|DC|DM))[^\n\r]+\{,这将匹配TopLevelNotTopLevel。我想以某种方式给一些正则表达式(或其他一些 swiftlint 工具)以不匹配NotTopLevel,但仍匹配TopLevelSecondTopLevel。这可能吗?关于如何做到这一点的任何想法?

我一直在尝试模仿的方法是在检查我们的前缀之前查找 0 个或多个以前的类定义,但是,在检查前缀之前尝试匹配整个类一次或多次时遇到了问题前缀。

【问题讨论】:

  • 你能假设你的缩进总是一致的吗?
  • 如果您不能使用缩进来查找声明的级别,那么单独使用正则表达式是无法做到这一点的。无论你想出什么正则表达式,总会有一组声明会破坏它。

标签: regex swiftlint


【解决方案1】:

你可以使用

(struct|class|protocol).*

所以你只匹配第一个结构类或协议。

【讨论】:

    猜你喜欢
    • 2015-06-07
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    相关资源
    最近更新 更多