2016-07-14 2 views
0

Я WOKING по реализации Rubocop, и я наткнулся на линии, похожей на этот в кодовом:Укорачивания определения очень длинный класса в Рубине

class ThisIsAVerlyLongClassName < JSONAPI::SomeOtherModule::AnotherClassWithAnInsaneName 

Rubocop сетует на длине линии, но я могу» t выяснить способ создания более компактной версии этого определения класса, не переименовывая классы, чего я пытаюсь избежать здесь.

Не вдаваясь в дебаты о стиле кодирования вообще, как лучше всего заставить Rubocop перестать жаловаться на длину строки, не делая исключения в .rubocop.yml или редактируя имена классов и модулей?

+1

Вы можете добавить разрыв строки до или после '<'. –

+0

@Jordan Спасибо! Это то, что я описал в своем собственном ответе на http://stackoverflow.com/a/38371776/859999 – aldavigdis

ответ

1

Я только что узнал, что определение класса может быть разбита на несколько строк, как так:

class ThisIsAVerlyLongClassName < 
    JSONAPI::SomeOtherModule::AnotherClassWithAnInsaneName 

Он ломает подсветку синтаксиса в Atom для вторая строка, но код запускается и все тесты проходят!

1

Каков наилучший способ заставить Rubocop прекратить жаловаться на длину строки, не делая исключения в .rubocop.yml или редактируя имена классов и модулей?

Нет выхода. Если вы хотите, чтобы исправить это жаловаться, вы должны либо:

  • disable it explicitly установкой переопределения в .rubocop.yml или для этого конкретного файла
  • затрагивался вопрос, следовательно, переименовать класс
1

Вы можете обычно отключить конкретное предупреждение Rubocop на определенной строке путем добавления комментария как следующий к этой линии:

class A < B::C::D # rubocop:disable Metrics/LineLength 
1

Хотя определение класса тела имеют свою собственную не вложенную лексическую область (например, тела определения метода), выражение суперкласса оценивается в пределах области содержимого. Другими словами: вы можете просто использовать локальную переменную:

superclass = JSONAPI::SomeOtherModule::AnotherClassWithAnInsaneName 
class ThisIsAVerlyLongClassName < superclass 
+0

Это вызывающе один из способов сделать это! Благодаря! – aldavigdis

Смежные вопросы