Сокращение очень длинного определения класса в Ruby
Я проснулся от реализации Rubocop и наткнулся на строку, похожую на эту в кодовой базе:
class ThisIsAVerlyLongClassName < JSONAPI::SomeOtherModule::AnotherClassWithAnInsaneName
Rubocop жалуется на длину строки здесь, но я не могу найти способ создать более компактную версию этого определения класса, не переименовывая классы, чего я здесь стараюсь избегать.
Не вдаваясь в споры о стиле кодирования в целом, как лучше всего заставить Rubocop перестать жаловаться на длину строки, не делая исключений в.rubocop.yml или редактируя имена классов и модулей?
4 ответа
Я только что узнал, что определение класса можно разбить на несколько строк, например:
class ThisIsAVerlyLongClassName <
JSONAPI::SomeOtherModule::AnotherClassWithAnInsaneName
Он нарушает подсветку синтаксиса в Atom для 2-й строки, но код запускается и все тесты проходят!
В то время как тела определения класса имеют свою собственную не вложенную лексическую область (например, тела определения метода), выражение суперкласса оценивается в содержащей области. Другими словами: вы можете просто использовать локальную переменную:
superclass = JSONAPI::SomeOtherModule::AnotherClassWithAnInsaneName
class ThisIsAVerlyLongClassName < superclass
Обычно вы можете отключить конкретное предупреждение Rubocop в определенной строке, добавив к этой строке комментарий, подобный следующему:
class A < B::C::D # rubocop:disable Metrics/LineLength
Каков наилучший способ заставить Rubocop перестать жаловаться на длину строки, не делая исключений в.rubocop.yml или редактируя имена классов и модулей?
Спасения нет. Если вы хотите исправить эту жалобу, вы должны либо:
- отключите его явно, установив переопределение в.rubocop.yml или для этого конкретного файла
- решить проблему, следовательно переименовать класс