У нас есть правило swiftlint, которое в основном обеспечивает префикс для наших структур, классов и протоколов (DC, DB или DM в зависимости от функции). Мы хотим сопоставить это только с объектами верхнего уровня, например. в приведенном ниже примере, я хотел бы только TopLevel
и SecondTopLevel
бросить ошибку:Как совместить объекты верхнего уровня в swiftlint
class TopLevel {
struct NotTopLevel {
var test
}
}
class SecondTopLevel {
}
Наш текущий регулярное выражение выглядит следующим образом: (struct|class|protocol)\s(?!(func|DB|DC|DM))[^\n\r]+\{
, и это будет соответствовать как TopLevel
и NotTopLevel
. Я хотел бы как-то дать некоторое regex (или какой-нибудь другой инструмент swiftlint) не соответствовать NotTopLevel
, но по-прежнему соответствовать TopLevel
и SecondTopLevel
. Это возможно? Есть идеи о том, как это сделать?
Подход, который я пытался подражать, состоит в том, чтобы искать 0 или более предыдущих определений классов перед проверкой нашего префикса, однако я сталкиваюсь с проблемами, которые пытаются сопоставить весь класс один или несколько раз, прежде чем проверять префикс.
Можете ли вы предположить, что ваш отступ всегда согласован? – Faibbus
Если вы не можете использовать отступы, чтобы найти уровень объявления, нет никакого способа сделать это с помощью обычного выражения. Независимо от того, какое регулярное выражение вы придумаете, всегда будет набор объявлений, которые сломают его. – Faibbus