Как сопоставить только объекты верхнего уровня в swiftlint
У нас есть правило 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 или более предыдущих определений классов, прежде чем проверять наш префикс, однако я сталкиваюсь с проблемами, пытаясь сопоставить весь класс один или несколько раз, прежде чем проверять префикс.
1 ответ
Ты можешь использовать
(struct|class|protocol).*
поэтому вы соответствуете только первому классу структуры или протоколу.