【发布时间】:2017-06-09 13:40:35
【问题描述】:
我们有一个 swiftlint 规则,它基本上在我们的结构、类和协议(DC、DB 或 DM 取决于功能)上强制使用前缀。我们只想将其与顶级对象匹配,例如在下面的示例中,我只希望 TopLevel 和 SecondTopLevel 抛出错误:
class TopLevel {
struct NotTopLevel {
var test
}
}
class SecondTopLevel {
}
我们当前的正则表达式如下:(struct|class|protocol)\s(?!(func|DB|DC|DM))[^\n\r]+\{,这将匹配TopLevel 和NotTopLevel。我想以某种方式给一些正则表达式(或其他一些 swiftlint 工具)以不匹配NotTopLevel,但仍匹配TopLevel 和SecondTopLevel。这可能吗?关于如何做到这一点的任何想法?
我一直在尝试模仿的方法是在检查我们的前缀之前查找 0 个或多个以前的类定义,但是,在检查前缀之前尝试匹配整个类一次或多次时遇到了问题前缀。
【问题讨论】:
-
你能假设你的缩进总是一致的吗?
-
如果您不能使用缩进来查找声明的级别,那么单独使用正则表达式是无法做到这一点的。无论你想出什么正则表达式,总会有一组声明会破坏它。