Twiek
Twiek

Reputation: 2103

Rubocop Layout/LineLength: How to ignore lines with comments?

I would like Rubocop to ignore lines with comments (just a comment or some code with an end of line comment) when checking if a line is too long. Is there a way to do this?

Upvotes: 170

Views: 145591

Answers (5)

GoBusto
GoBusto

Reputation: 4788

It's possible to define regex patterns to automatically ignore certain lines in rubocop.yml, so you could choose to ignore all lines starting with a # character:

Layout/LineLength:
  Max: 80
  AllowedPatterns: ['\A#']

Or:

Layout/LineLength:
  Max: 80
  AllowedPatterns:
    - !ruby/regexp /\A#/

This could be improved so that "indented" comment lines (i.e. whitespace followed by a # character) are also ignored, if that's what you want. e.g.

Layout/LineLength:
  Max: 80
  AllowedPatterns:
    - !ruby/regexp /\A *# /

Note that this doesn't account for lines of code that end with a comment, though:

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

Upvotes: 54

Vadim Kononov
Vadim Kononov

Reputation: 2184

The following configuration worked for me:

Layout/LineLength:
  AllowedPatterns: ['^(\s*#)']

This regex only works when the entire line is commented out. Code followed by a long comment on the same line will still trigger a Rubocop lint error, which is by design.

Upvotes: 2

vgoff
vgoff

Reputation: 11323

There is a way to ignore cops on a per line basis.

There is also a way to do it via configuration file.

Run rubocop --auto-gen-config and it will generate a file that you can use to disable the offenses.

The command also gives a hint on what to do to load those options.

On a line per line basis, you can enable and disable the cops as well.

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

You can also do more than one rule at a time in your code.

# rubocop:disable BlockComments, AsciiComments

By using an inline directive, the directive becomes valid only for that line, and it would look like this:

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

You can read a ton more about RuboCop in its official manual.

To find all the rule names its worth looking in the rubocop config files

cyberwiz says - "run rubocop -D when I need the rule names rather than looking in the documentation." Update: This is now the default behavior without the flag.

The -D is now default, so we would get that for "free" now.

Upvotes: 288

user9903
user9903

Reputation:

You can use the following comment with rubocop to ignore a specific rule:

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

You can also ignore whole files by adding them to .rubocop.yml:

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

Upvotes: 24

phoet
phoet

Reputation: 18845

i think the basic idea here is that you want to enforce line length, no matter what is after n characters. the default to 80 characters is some cargo cult for old terminal windows that could only hold that number of chars. the only option that i saw in the code is an option to allow urls that might exceed the character limit.

you can ignore whole files, i guess that's not what you are looking for.

Upvotes: 5

Related Questions