Class: RuboCop::Cop::Layout::LineEndStringConcatenationIndentation

Inherits:
Base
  • Object
show all
Extended by:
AutoCorrector
Includes:
Alignment, ConfigurableEnforcedStyle
Defined in:
lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb

Overview

Checks the indentation of the next line after a line that ends with a string literal and a backslash.

If EnforcedStyle: aligned is set, the concatenated string parts shall be aligned with the first part. There are some exceptions, such as implicit return values, where the concatenated string parts shall be indented regardless of EnforcedStyle configuration.

If EnforcedStyle: indented is set, it’s the second line that shall be indented one step more than the first line. Lines 3 and forward shall be aligned with line 2.

Examples:

# bad
def some_method
  'x' \
  'y' \
  'z'
end

my_hash = {
  first: 'a message' \
    'in two parts'
}

# good
def some_method
  'x' \
    'y' \
    'z'
end

EnforcedStyle: aligned (default)

# bad
puts 'x' \
  'y'

my_hash = {
  first: 'a message' \
    'in two parts'
}

# good
puts 'x' \
     'y'

my_hash = {
  first: 'a message' \
         'in two parts'
}

EnforcedStyle: indented

# bad
result = 'x' \
         'y'

my_hash = {
  first: 'a message' \
         'in two parts'
}

# good
result = 'x' \
  'y'

my_hash = {
  first: 'a message' \
    'in two parts'
}

Constant Summary collapse

MSG_ALIGN =
'Align parts of a string concatenated with backslash.'
MSG_INDENT =
'Indent the first part of a string concatenated with backslash.'
PARENT_TYPES_FOR_INDENTED =
[nil, :block, :begin, :def, :defs, :if].freeze

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 ConfigurableEnforcedStyle

#alternative_style, #alternative_styles, #ambiguous_style_detected, #correct_style_detected, #detected_style, #detected_style=, #no_acceptable_style!, #no_acceptable_style?, #opposite_style_detected, #style, #style_configured?, #style_detected, #style_parameter_name, #supported_styles, #unexpected_style_detected

Methods inherited from Base

#active_support_extensions_enabled?, #add_global_offense, #add_offense, autocorrect_incompatible_with, badge, #begin_investigation, callbacks_needed, #callbacks_needed, #config_to_allow_offenses, #config_to_allow_offenses=, #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_investigation_end, #on_new_investigation, #on_other_file, #parse, #ready, #relevant_file?, support_autocorrect?, support_multiple_source?, #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

#autocorrect(corrector, node) ⇒ Object



97
98
99
# File 'lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb', line 97

def autocorrect(corrector, node)
  AlignmentCorrector.correct(corrector, processed_source, node, @column_delta)
end

#on_dstr(node) ⇒ Object



83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb', line 83

def on_dstr(node)
  return unless strings_concatenated_with_backslash?(node)

  children = node.children
  return if children.empty?

  if style == :aligned && !always_indented?(node)
    check_aligned(children, 1)
  else
    check_indented(children)
    check_aligned(children, 2)
  end
end