Правило SwiftLint для метки прагмы

Я пытаюсь реализовать собственное правило swiftlint для отслеживания, когда перед «// MARK:» меньше двух новых строк. Я не силен в регулярных выражениях. Вот мое правило:

    custom_rules:
pragma_mark:
name: "Wrong pagma mark format"
regex: "([^\n\n]?\/\/ MARK:)"
message: "Please leave two lines before // MARK:"
severity: warning

но это регулярное выражение неверно. что я делаю не так? Может быть, в swiftlint уже есть это правило? Но я не могу найти


person Severyn Katolyk    schedule 20.04.2018    source источник
comment
Убедитесь сами: regexr.com/3o9hq   -  person Alexander    schedule 20.04.2018
comment
Вам нужен негативный взгляд назад. Использование [^\n\n] говорит о совпадении одного символа, который является либо \n, либо `\n`   -  person Alexander    schedule 20.04.2018


Ответы (1)


Вам нужно будет использовать отрицательный взгляд назад. Вот отправная точка:

(?<!\n\n)\/\/ MARK:

А вот страница RegExr, на которой объясняется, как это работает, и предлагаются некоторые тестовые примеры.

Вы, вероятно, захотите сделать этот регистр нечувствительным и быть терпимым к пробелам до и после MARK.

person Alexander    schedule 20.04.2018
comment
У меня не работает :( ` }\n }\n // MARK: Расширение заголовка\n extension FilterViewController {` Нет предупреждения. Может быть, пользовательское правило неправильно отформатировано? - person Severyn Katolyk; 23.04.2018
comment
Создайте страницу regexr с неудачными тестами и разместите ее здесь. - person Alexander; 23.04.2018
comment
@SeverynKatolyk К сожалению, я отменил это. У меня был положительный взгляд назад ((?<= ... )), а не отрицательный взгляд назад по мере необходимости ((?<! ... )). Исправлено! regexr.com/3ohcj - person Alexander; 25.04.2018