Class: RuboCop::Cop::Layout::LineLength

Inherits:
Cop
  • Object
show all
Includes:
CheckLineBreakable, ConfigurableMax, IgnoredPattern, RuboCop::Cop::LineLengthHelp, RangeHelp
Defined in:
lib/rubocop/cop/layout/line_length.rb

Overview

This cop checks the length of lines in the source code. The maximum length is configurable. The tab size is configured in the ‘IndentationWidth` of the `Layout/IndentationStyle` cop. It also ignores a shebang line by default.

This cop has some autocorrection capabilities. It can programmatically shorten certain long lines by inserting line breaks into expressions that can be safely split across lines. These include arrays, hashes, and method calls with argument lists.

If autocorrection is enabled, the following Layout cops are recommended to further format the broken lines. (Many of these are enabled by default.)

  • ArgumentAlignment

  • BlockAlignment

  • BlockDelimiters

  • BlockEndNewline

  • ClosingParenthesisIndentation

  • FirstArgumentIndentation

  • FirstArrayElementIndentation

  • FirstHashElementIndentation

  • FirstParameterIndentation

  • HashAlignment

  • IndentationWidth

  • MultilineArrayLineBreaks

  • MultilineBlockLayout

  • MultilineHashBraceLayout

  • MultilineHashKeyLineBreaks

  • MultilineMethodArgumentLineBreaks

  • ParameterAlignment

Together, these cops will pretty print hashes, arrays, method calls, etc. For example, let’s say the max columns is 25:

Examples:


# bad
{foo: "0000000000", bar: "0000000000", baz: "0000000000"}

# good
{foo: "0000000000",
bar: "0000000000", baz: "0000000000"}

# good (with recommended cops enabled)
{
  foo: "0000000000",
  bar: "0000000000",
  baz: "0000000000",
}

Constant Summary collapse

MSG =
'Line is too long. [%<length>d/%<max>d]'

Constants included from Util

Util::LITERAL_REGEX

Instance Attribute Summary

Attributes inherited from Cop

#config, #corrections, #offenses, #processed_source

Instance Method Summary collapse

Methods included from CheckLineBreakable

#extract_breakable_node

Methods inherited from Cop

#add_offense, all, autocorrect_incompatible_with, badge, #config_to_allow_offenses, #config_to_allow_offenses=, #cop_config, #cop_name, cop_name, #correct, department, #disable_uncorrectable, #duplicate_location?, #excluded_file?, #external_dependency_checksum, #find_location, #highlights, inherited, #initialize, #join_force?, lint?, match?, #message, #messages, #parse, qualified_cop_name, #reason_to_not_correct, #relevant_file?, #target_rails_version, #target_ruby_version

Methods included from AutocorrectLogic

#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #correctable?, #disable_offense, #disable_uncorrectable?, #safe_autocorrect?, #support_autocorrect?

Methods included from IgnoredNode

#ignore_node, #ignored_node?, #part_of_ignored_node?

Methods included from Util

add_parentheses, args_begin, args_end, begins_its_line?, comment_line?, comment_lines?, double_quotes_required?, escape_string, first_part_of_call_chain, interpret_string_escapes, line_range, needs_escaping?, on_node, parentheses?, same_line?, to_string_literal, to_supported_styles, tokens, trim_string_interporation_escape_character

Methods included from PathUtil

absolute?, chdir, hidden_dir?, hidden_file_in_not_hidden_dir?, match_path?, pwd, relative_path, reset_pwd, smart_path

Constructor Details

This class inherits a constructor from RuboCop::Cop::Cop

Instance Method Details

#autocorrect(range) ⇒ Object



91
92
93
94
95
96
97
# File 'lib/rubocop/cop/layout/line_length.rb', line 91

def autocorrect(range)
  return if range.nil?

  lambda do |corrector|
    corrector.insert_before(range, "\n")
  end
end

#investigate(processed_source) ⇒ Object



81
82
83
# File 'lib/rubocop/cop/layout/line_length.rb', line 81

def investigate(processed_source)
  check_for_breakable_semicolons(processed_source)
end

#investigate_post_walk(processed_source) ⇒ Object



85
86
87
88
89
# File 'lib/rubocop/cop/layout/line_length.rb', line 85

def investigate_post_walk(processed_source)
  processed_source.lines.each_with_index do |line, line_index|
    check_line(line, line_index)
  end
end

#on_block(node) ⇒ Object



70
71
72
# File 'lib/rubocop/cop/layout/line_length.rb', line 70

def on_block(node)
  check_for_breakable_block(node)
end

#on_potential_breakable_node(node) ⇒ Object Also known as: on_array, on_hash, on_send



74
75
76
# File 'lib/rubocop/cop/layout/line_length.rb', line 74

def on_potential_breakable_node(node)
  check_for_breakable_node(node)
end