Rubocop Linelength: How to ignore lines with comments?

Using a Rails 4 app 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 to long. Is there a way to do this?


Solution 1:

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.

Solution 2:

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
  IgnoredPatterns: ['\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.

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.

Solution 3:

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

Solution 4:

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.