Лінійна довжина Rubocop: як ігнорувати рядки з коментарями?


109

Використовуючи додаток Rails 4, я хотів би, щоб Rubocop ігнорував рядки з коментарями (просто коментар або якийсь код із коментарем у кінці рядка), коли перевіряв, чи потрібна лінія. Чи є спосіб це зробити?

Відповіді:


197

Існує спосіб ігнорувати поліцейських за лінією.

Існує також спосіб зробити це через файл конфігурації.

Запустіть, rubocop --auto-gen-configі він створить файл, який ви можете використовувати для відключення правопорушень.

Команда також дає підказку, що робити для завантаження цих параметрів.

На основі рядка за рядком ви також можете вмикати та вимикати поліцейських.

# rubocop:disable RuleByName
This is a long line 
# rubocop:enable RuleByName

Ви також можете одночасно робити кілька правил у своєму коді.

# rubocop:disable BlockComments, AsciiComments

Використовуючи вбудовану директиву, директива стає дійсною лише для цього рядка, і виглядатиме це приблизно так:

# Thanks to @jnt30 for the comment!
method(argument) # rubocop:disable SomeRule, SomeOtherRule

Ви можете прочитати тонну детальніше про RuboCop в її офіційному посібнику .

Щоб знайти всі назви правил, варто переглянути їх у файлах конфігурації rubocop

cyberwiz каже - "запускати, rubocop -Dколи мені потрібні назви правил, а не шукати в документації". Оновлення : тепер це поведінка за замовчуванням без прапора.


1
Ну, коментарі можуть пояснити відхилення від стилю, який був прийнятий командою, тож це не погано, правда? В іншому випадку ви розміщуєте його у файлі rubocop.yml, і тоді він не є винятковим стилем і не потребує коментарів. У коментарі сказано: «Я мав намір це зробити!». Зовсім не погана річ.
vgoff

1
коментарі не є кодовими, тому перевірка їх семантично відрізняється, і rubocop IMO повинен ставитися до цього таким чином.
фоет

2
Коментарі є частиною коду, і коли ви маєте справу з кодом в електронній пошті або на терміналі. Я думаю, що це неприємно, щоб ваші коментарі не дотримувалися тієї ж довжини рядка, яку прийняла "команда", як код. Вони не повинні порушувати потік лише тому, що це коментарі. Я впевнений, що rubocop не перевіряє коментарі щодо будь-якого, крім директив, семантично (змістовно). Це дійсно перевіряє довжину рядка та стиль коментарів. Так що ні, він не шукає сенсу, це лише перевірка стилю. Не забувайте, що "коментарі не є кодом" не повинні бути.
vgoff

Дійсно, навіть #!/bin/env rubyрядок коментарів - це коментар, але все ж код і є семантично важливим. Коментарі не завжди є лише "коментарями".
vgoff

1
@Twiek щось не вистачає в цій відповіді, яку ви шукаєте?
vgoff

35

Можна визначити шаблони регулярних виразів, щоб автоматично ігнорувати певні рядки rubocop.yml, щоб ви могли ігнорувати всі рядки, починаючи з #символу:

Metrics/LineLength:
  Max: 80
  IgnoredPatterns: ['\A#']

Це можна вдосконалити так, що "відступні" рядки коментарів (тобто пробіл, який супроводжується #символом) також ігноруються, якщо це саме ви хочете.

Зауважте, що це не враховує рядки коду, які закінчуються коментарем:

some_code(that_does_something) # This line would NOT be ignored by Rubocop.

9
Ви можете розширити цей регулярний вираз, включивши рядки, які можуть мати пробіли:IgnorePatterns: ['(\A|\s)#']
poustovitss

1
Дякуємо @poustovitss. Існує помилка друку: IgnoredPatternsзамість цього має бути IgnorePatterns(пропущена літера 'd').
Гораціо

9

Ви можете використовувати наступний коментар з rubocop, щоб ігнорувати певне правило:

# rubocop:disable Metrics/LineLength
def this_could_be_a_very_long_line_that_extends_forever_into_infinity
end
# rubocop:enable Metrics/LineLength

Ви також можете проігнорувати цілі файли, додавши їх до .rubocop.yml:

AllCops:
  Exclude:
    - path/to/file.rb

6

Я думаю, що основна ідея тут полягає в тому, що ви хочете виконати довжину рядка, незалежно від того, що буде після n символів. за замовчуванням до 80 символів - деякий культовий культ для старих вікон терміналів, який міг би містити лише таку кількість символів. єдиний варіант, який я бачив у коді, - це можливість дозволити URL-адреси, які можуть перевищувати обмеження кількості символів.

ви можете ігнорувати цілі файли , я думаю, це не те, що ви шукаєте.


8
В наші дні ідея, що стоїть на 80 символах, не настільки "вантажний культ" для терміналу, все ще є логічна причина цього: кожен може розділити свої редактори чи вікна IDE, скільки хоче, і поки вони просто ширші ніж 80 символів, їм не потрібно буде змінювати ширину або відчувати обгортання.
Джейсон Антман

2
IMO, якщо у вас немає IDE, який підтримує м'яке обгортання, ваш інструмент не оновлюється.
фоет

8
80 символів також досить читабельні, тоді як 40 чи 200 - це менше, тому це також є зручністю
Тоні Лі

№1 ", якщо вони просто ширше 80 символів" 800x600 ширше, ніж 80 символів, і у вас є така ж проблема з переглядом бічних файлів 2 80 символів. Це нісенітниця і стосується лише 1366 res. З переходом 1920+ і наступним аргументом буде "Я можу розділити 3, 4 файли"
Andre Figueiredo

1
у нас це було в 80, потім змінили його на 120. Якщо проблематично переглядати PR-огляд коду на Github у розділеному екрані на 13-
дюймових
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.