Rubocop Linelength: как игнорировать строки с комментариями?

109

Используя приложение Rails 4, я бы хотел, чтобы Rubocop игнорировал строки с комментариями (просто комментарий или какой-то код с комментарием в конце строки) при проверке, является ли строка слишком длинной. Есть ли способ сделать это?

Twiek
источник

Ответы:

198

Есть способ игнорировать полицейских по очереди.

Также есть способ сделать это через файл конфигурации.

Бегать 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когда мне нужны имена правил, а не в документации». Обновление : теперь это поведение по умолчанию без флага.

vgoff
источник
1
Что ж, комментарии могут объяснить отклонение от стиля, принятого командой, так что это неплохо, правда? В противном случае вы помещаете его в файл rubocop.yml, и тогда это исключение неприемлемо для стиля и не требует комментариев. В комментарии говорится: «Я хотел это сделать!». Совсем неплохо.
vgoff
1
комментарии не являются кодом, поэтому их проверка семантически отличается, и IMO rubocop должен относиться к этому так же.
phoet
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.
GoBusto
источник
9
Вы можете расширить это регулярное выражение, включив строки, в которых могут быть пробелы:IgnorePatterns: ['(\A|\s)#']
poustovitss
1
Спасибо @poustovitss. Опечатка: IgnoredPatternsвместо этого должна быть IgnorePatterns(отсутствует буква "d").
Horacio
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-адреса, которые могут превышать лимит символов.

вы можете игнорировать целые файлы , я думаю, это не то, что вы ищете.

Phoet
источник
8
В наши дни идея 80 символов - это не столько «культ груза» для терминала, для этого все еще есть логическая причина: любой может разделить свой редактор или окна IDE, как хочет, и при условии, что они просто шире чем 80 символов, им не нужно будет изменять ширину или перенос данных.
Джейсон Антман
2
ИМО, если у вас нет IDE, поддерживающего мягкую упаковку, ваш инструментарий не обновлен.
phoet
8
80 символов также хорошо читаются, тогда как 40 или 200 менее читабельны, так что это еще и удобство использования,
Тони Ли
# 1 «пока они шире 80 символов» 800x600 шире 80 символов, и у вас такая же проблема при просмотре двух файлов по 80 символов рядом. Это чушь и относится только к 1366 res. С приходом 1920+ следующим аргументом будет «Я могу разделить 3, 4 файла»
Андре Фигейредо
1
у нас было 80, потом изменили на 120. Проблемой стало рассмотрение PR во время проверки кода на Github в режиме разделенного экрана на 13-
дюймовых