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

Inherits:
Base
  • Object
show all
Extended by:
AutoCorrector
Includes:
AllowedPattern, CheckLineBreakable, RuboCop::Cop::LineLengthHelp, RangeHelp
Defined in:
lib/rubocop/cop/layout/line_length.rb

Overview

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 cops are recommended to further format the broken lines. (Many of these are enabled by default.)

  • ‘Layout/ArgumentAlignment`

  • ‘Layout/ArrayAlignment`

  • ‘Layout/BlockAlignment`

  • ‘Layout/BlockEndNewline`

  • ‘Layout/ClosingParenthesisIndentation`

  • ‘Layout/FirstArgumentIndentation`

  • ‘Layout/FirstArrayElementIndentation`

  • ‘Layout/FirstHashElementIndentation`

  • ‘Layout/FirstParameterIndentation`

  • ‘Layout/HashAlignment`

  • ‘Layout/IndentationWidth`

  • ‘Layout/MultilineArrayLineBreaks`

  • ‘Layout/MultilineBlockLayout`

  • ‘Layout/MultilineHashBraceLayout`

  • ‘Layout/MultilineHashKeyLineBreaks`

  • ‘Layout/MultilineMethodArgumentLineBreaks`

  • ‘Layout/MultilineMethodParameterLineBreaks`

  • ‘Layout/ParameterAlignment`

  • ‘Style/BlockDelimiters`

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 Alignment

Alignment::SPACE

Constants included from RangeHelp

RangeHelp::BYTE_ORDER_MARK, RangeHelp::NOT_GIVEN

Constants inherited from Base

Base::RESTRICT_ON_SEND

Instance Attribute Summary

Attributes inherited from Base

#config, #processed_source

Instance Method Summary collapse

Methods included from AutoCorrector

support_autocorrect?

Methods included from CheckLineBreakable

#extract_breakable_node

Methods inherited from Base

#active_support_extensions_enabled?, #add_global_offense, #add_offense, #always_autocorrect?, autocorrect_incompatible_with, badge, #begin_investigation, callbacks_needed, #callbacks_needed, #config_to_allow_offenses, #config_to_allow_offenses=, #contextual_autocorrect?, #cop_config, cop_name, #cop_name, department, documentation_url, exclude_from_registry, #excluded_file?, #external_dependency_checksum, inherited, #initialize, #inspect, joining_forces, lint?, match?, #message, #offenses, #on_other_file, #parse, #parser_engine, #ready, #relevant_file?, requires_gem, #string_literals_frozen_by_default?, support_autocorrect?, support_multiple_source?, #target_gem_version, #target_rails_version, #target_ruby_version

Methods included from ExcludeLimit

#exclude_limit

Methods included from AutocorrectLogic

#autocorrect?, #autocorrect_enabled?, #autocorrect_requested?, #autocorrect_with_disable_uncorrectable?, #correctable?, #disable_uncorrectable?, #safe_autocorrect?

Methods included from IgnoredNode

#ignore_node, #ignored_node?, #part_of_ignored_node?

Methods included from Util

silence_warnings

Constructor Details

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

Instance Method Details

#on_block(node) ⇒ Object Also known as: on_numblock, on_itblock

[View source]

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

def on_block(node)
  check_for_breakable_block(node)
end

#on_dstr(node) ⇒ Object

[View source]

84
85
86
# File 'lib/rubocop/cop/layout/line_length.rb', line 84

def on_dstr(node)
  check_for_breakable_dstr(node)
end

#on_investigation_endObject

[View source]

104
105
106
107
108
# File 'lib/rubocop/cop/layout/line_length.rb', line 104

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

#on_new_investigationObject

[View source]

98
99
100
101
102
# File 'lib/rubocop/cop/layout/line_length.rb', line 98

def on_new_investigation
  return unless processed_source.raw_source.include?(';')

  check_for_breakable_semicolons(processed_source)
end

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

[View source]

88
89
90
# File 'lib/rubocop/cop/layout/line_length.rb', line 88

def on_potential_breakable_node(node)
  check_for_breakable_node(node)
end

#on_str(node) ⇒ Object

[View source]

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

def on_str(node)
  check_for_breakable_str(node)
end