Как исправить «Нарушение длины строки: длина строки не должна превышать 120 символов» — SwiftLint

Как исправить нарушение длины строки?

Соответствующая часть предупреждающего сообщения, которая не разрешена из-за нарушения длины строки: message: NSLocalizedString("\nYou will be requested to Use %@ to Sign In. %@ doesn't share any information about you. The permission is required to post your Live Video.", ⚠ Строка должна быть не более 120 символов: в настоящее время 208 символов (line_length)


person Yatko    schedule 24.02.2018    source источник
comment
Это похоже на сообщение SwiftLint.   -  person rmaddy    schedule 24.02.2018
comment
@rmaddy да, и не знаю, как это исправить   -  person Yatko    schedule 24.02.2018
comment
Что ж, укоротите строку или отключите предупреждение (четко объяснено на github.com/realm/SwiftLint/blob/master/)   -  person Martin R    schedule 24.02.2018
comment
@matt точно так же, вопрос кажется трудным для понимания, хотя Мартин ответил на него   -  person Yatko    schedule 09.03.2018


Ответы (3)


Сократите строку:

message: NSLocalizedString(
    ["\nYou will be requested to Use %@ to Sign In. ",
    "%@ doesn't share any information about you. The ",
    "permission is required to post your Live Video."].joined()
)

или лучше, используя многострочное решение vacawama:

let message = 
    """

    You will be requested to Use %@ to Sign In. \
    %@ doesn't share any information about you. \
    The permission is required to post your Live Video.
    """

Это универсальное решение, но оно не совсем подходит для NSLocalizedString, потому что оно ломает инструменты, сканирующие локализованные строки, такие как genstrings.

Другое решение — отключить предупреждение для этой строки, добавив отключение в строку непосредственно перед:

// swiftlint:disable:next line_length

Подробнее об отключении правил swiftlint см. в разделе Отключение правил в коде.

person Rob Napier    schedule 24.02.2018
comment
Если вы закончите строки обратной косой чертой, это не приведет к появлению новых строк. - person vacawama; 24.02.2018
comment
@vacawama эй… я этого не знал. Это потрясающе. - person Rob Napier; 24.02.2018
comment
Отключение правил линтинга никогда не было хорошим решением. Если вы начнете делать это, в первую очередь нет смысла иметь линтер. Основная проблема заключается в том, что инструменты локализации хотят, чтобы вы использовали сообщение по умолчанию в качестве ключа локализации. Нет смысла помещать все сообщение в код, простой строковый код, например. sign_in_info тоже подойдет. - person Sulthan; 24.02.2018
comment
Я не согласен с тем, что отключение правил линтинга никогда не является хорошим решением. Если бы это было правдой, это были бы ошибки компилятора. Тот факт, что мы отделяем даже предупреждения от линтинга, сделан намеренно. Линтинг намеренно чрезмерно строг. Даже в Go, где такие безобидные вещи, как отказ от использования переменной, являются ошибкой времени компиляции, все еще существует линтер (govet), который иногда правильно игнорировать. Правильный выбор между укороченными ключами локализации и использованием автоматизированных инструментов не имеет универсального ответа. Говорить, что линтер запрещает использовать инструменты локализации Apple, — глупая последовательность. - person Rob Napier; 24.02.2018
comment
(Я говорю это как давний сторонник существования единственного истинного стиля Swift, такого, чтобы clang-format применял ровно один способ компоновки кода Swift. . openradar.appspot.com/radar?id=5886836526284800) - person Rob Napier; 24.02.2018
comment
// swiftlint:disable:next line_length это ответ, который мы нашли лучшим - person Yatko; 15.03.2018

В этом случае просто обновите правило line_length на ignores_interpolated_strings следующим образом:

line_length:
  warning: 120
  ignores_function_declarations: true
  ignores_comments: true
  ignores_interpolated_strings: true
  ignores_urls: true

и убедитесь, что вы используете последнюю версию swiftlint (она была добавлена всего несколько недель назад). )

person Ilya Ilin    schedule 21.05.2018
comment
Не игнорируя комментарии. - person Soumen; 29.07.2018
comment
это не работает :( он пытается поместить то же самое в файл .yml, и снова такое же предупреждение все еще появляется, только пока работает следующее line_length: 200, которое я не хочу для всей строки - person Amr Angry; 06.03.2019
comment
предупреждение не проходит по ignores_interpolated_strings эта штука - person Pravin Tate; 25.09.2020

Эта строка, добавленная в файл правил .swiftlint.yml, у меня работает

# implicitly 
line_length: 110
person kishor soneji    schedule 30.04.2020