Правило SwiftLint для фигурных скобок на следующей строке, но с некоторыми исключениями - PullRequest
2 голосов
/ 30 мая 2019

Я хочу изменить .swiftlint.yml, чтобы добавить некоторые пользовательские правила для принудительного использования скобок в следующей строке. Это работает для меня ...

  opening_braces:
    name: "Opening Braces not on Next Line"
    message: "Opening braces should be placed on the next line."
    include: "*.swift"
    regex: '\S[ \t]*\{'
    severity: warning

Однако в некоторых случаях я хочу разрешить скобки на одной строке, например, как то так:

override var cornerRadius: CGFloat
{
    get { return layer.cornerRadius }
    set { layer.cornerRadius = newValue }
}

Как мне изменить мое регулярное выражение, чтобы разрешить ту же строку для однострочных геттеров / сеттеров?

1 Ответ

1 голос
/ 30 мая 2019

Я предлагаю использовать

regex: '^(?![ \t]*[sg]et[ \t]+\{.*\}).*\S[ \t]*\{'

Или его альтернативу с \h соответствующим горизонтальным пробелом:

regex: '^(?!\h*[sg]et\h+\{.*\}).*\S\h*\{'

См. Демонстрационную версию regex (или этот ).

Подробности

  • ^ - начало строки
  • (?!\h*[sg]et\h+\{.*\}) - местоположение встрока, за которой не следует сразу же ставить
    • \h* - 0+ горизонтальных пробелов
    • [sg]et - set или get
    • \h+ - 1+ горизонтальные пробелы
    • \{.*\} - {, любые 0+ символов, как можно больше, и }
  • .* - любые 0+символов, как можно больше
  • \S - символ без пробелов
  • \h* - 0+ горизонтальных пробелов
  • \{ - { char.
...