Class: RuboCop::Cop::Layout::FirstArrayElementIndentation

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

Overview

Checks the indentation of the first element in an array literal where the opening bracket and the first element are on separate lines. The other elements’ indentations are handled by ‘Layout/ArrayAlignment` cop.

This cop will respect ‘Layout/ArrayAlignment` and will not work when `EnforcedStyle: with_fixed_indentation` is specified for `Layout/ArrayAlignment`.

By default, array literals that are arguments in a method call with parentheses, and where the opening square bracket of the array is on the same line as the opening parenthesis of the method call, shall have their first element indented one step (two spaces) more than the position inside the opening parenthesis.

Other array literals shall have their first element indented one step more than the start of the line where the opening square bracket is.

This default style is called ‘special_inside_parentheses’. Alternative styles are ‘consistent’ and ‘align_brackets’. Here are examples:

Examples:

EnforcedStyle: special_inside_parentheses (default)

# The `special_inside_parentheses` style enforces that the first
# element in an array literal where the opening bracket and first
# element are on separate lines is indented one step (two spaces) more
# than the position inside the opening parenthesis.

# bad
array = [
  :value
]
and_in_a_method_call([
  :no_difference
                     ])

# good
array = [
  :value
]
but_in_a_method_call([
                       :its_like_this
                     ])

EnforcedStyle: consistent

# The `consistent` style enforces that the first element in an array
# literal where the opening bracket and the first element are on
# separate lines is indented the same as an array literal which is not
# defined inside a method call.

# bad
array = [
  :value
]
but_in_a_method_call([
                       :its_like_this
])

# good
array = [
  :value
]
and_in_a_method_call([
  :no_difference
])

EnforcedStyle: align_brackets

# The `align_brackets` style enforces that the opening and closing
# brackets are indented to the same position.

# bad
and_now_for_something = [
                          :completely_different
]

# good
and_now_for_something = [
                          :completely_different
                        ]

Constant Summary collapse

MSG =
'Use %<configured_indentation_width>d spaces for indentation ' \
'in an array, relative to %<base_description>s.'

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, #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?, #offenses, #on_investigation_end, #on_new_investigation, #on_other_file, #parse, #parser_engine, #ready, #relevant_file?, requires_gem, #string_literals_frozen_by_default?, 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

#on_array(node) ⇒ Object



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

def on_array(node)
  return if style != :consistent && enforce_first_argument_with_fixed_indentation?

  check(node, nil) if node.loc.begin
end

#on_send(node) ⇒ Object Also known as: on_csend



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

def on_send(node)
  return if style != :consistent && enforce_first_argument_with_fixed_indentation?

  each_argument_node(node, :array) do |array_node, left_parenthesis|
    check(array_node, left_parenthesis)
  end
end