Class: RuboCop::Cop::Layout::FirstArrayElementIndentation
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
::RuboCop::Cop::AutoCorrector ,
::RuboCop::Cop::Base ,
::RuboCop::ExcludeLimit ,
NodePattern::Macros,
RuboCop::AST::Sexp
|
|
Instance Chain:
|
|
Inherits: |
RuboCop::Cop::Base
|
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:
Constant Summary
-
MSG =
# File 'lib/rubocop/cop/layout/first_array_element_indentation.rb', line 88'Use %<configured_indentation_width>d spaces for indentation ' \ 'in an array, relative to %<base_description>s.'
::RuboCop::Cop::Base
- Inherited
EMPTY_OFFENSES, RESTRICT_ON_SEND
::RuboCop::Cop::Alignment
- Included
::RuboCop::Cop::ConfigurableEnforcedStyle
- Included
Class Attribute Summary
::RuboCop::Cop::AutoCorrector
- Extended
::RuboCop::Cop::Base
- Inherited
.gem_requirements, .lint?, | |
.support_autocorrect? | Returns if class supports autocorrect. |
.support_multiple_source? | Override if your cop should be called repeatedly for multiple investigations Between calls to |
Class Method Summary
::RuboCop::Cop::Base
- Inherited
.autocorrect_incompatible_with | List of cops that should not try to autocorrect at the same time as this cop. |
.badge | Naming. |
.callbacks_needed, .cop_name, .department, | |
.documentation_url | Returns a url to view this cops documentation online. |
.exclude_from_registry | Call for abstract Cop classes. |
.inherited, | |
.joining_forces | Override and return the Force class(es) you need to join. |
.match? | Returns true if the cop name or the cop namespace matches any of the given names. |
.new, | |
.requires_gem | Register a version requirement for the given gem name. |
.restrict_on_send |
::RuboCop::ExcludeLimit
- Extended
exclude_limit | Sets up a configuration option to have an exclude limit tracked. |
transform |
Instance Attribute Summary
- #enforce_first_argument_with_fixed_indentation? ⇒ Boolean readonly private
::RuboCop::Cop::ConfigurableEnforcedStyle
- Included
::RuboCop::Cop::Alignment
- Included
::RuboCop::Cop::Base
- Inherited
::RuboCop::Cop::AutocorrectLogic
- Included
Instance Method Summary
- #on_array(node)
-
#on_csend(node)
Alias for #on_send.
- #on_send(node) (also: #on_csend)
- #array_alignment_config private
- #autocorrect(corrector, node) private
-
#base_description(indent_base_type)
private
Returns the description of what the correct indentation is based on.
- #brace_alignment_style private
- #check(array_node, left_parenthesis) private
- #check_right_bracket(right_bracket, first_elem, left_bracket, left_parenthesis) private
- #message(base_description) private
- #message_for_right_bracket(indent_base_type) private
::RuboCop::Cop::MultilineElementIndentation
- Included
::RuboCop::Cop::ConfigurableEnforcedStyle
- Included
::RuboCop::Cop::Alignment
- Included
#check_alignment, #configured_indentation_width, #display_column, #each_bad_alignment, #end_of_line_comment, #indentation, #offset, #register_offense, #within? |
::RuboCop::Cop::Base
- Inherited
#add_global_offense | Adds an offense that has no particular location. |
#add_offense | Adds an offense on the specified range (or node with an expression) Unless that offense is disabled for this range, a corrector will be yielded to provide the cop the opportunity to autocorrect the offense. |
#begin_investigation | Called before any investigation. |
#callbacks_needed, | |
#cop_config | Configuration Helpers. |
#cop_name, #excluded_file?, | |
#external_dependency_checksum | This method should be overridden when a cop’s behavior depends on state that lives outside of these locations: |
#inspect, | |
#message | Gets called if no message is specified when calling |
#name | Alias for Base#cop_name. |
#offenses, | |
#on_investigation_end | Called after all on_… |
#on_new_investigation | Called before all on_… |
#on_other_file | Called instead of all on_… |
#parse | There should be very limited reasons for a Cop to do it’s own parsing. |
#parser_engine, | |
#ready | Called between investigations. |
#relevant_file?, #target_rails_version, #target_ruby_version, #annotate, #apply_correction, #attempt_correction, | |
#callback_argument | Reserved for Cop::Cop. |
#complete_investigation | Called to complete an investigation. |
#correct, #current_corrector, | |
#current_offense_locations | Reserved for Commissioner: |
#current_offenses, #currently_disabled_lines, #custom_severity, #default_severity, #disable_uncorrectable, #enabled_line?, #file_name_matches_any?, #find_message, #find_severity, #range_for_original, #range_from_node_or_range, | |
#reset_investigation | Actually private methods. |
#use_corrector |
::RuboCop::Cop::AutocorrectLogic
- Included
#disable_offense, #disable_offense_at_end_of_line, #disable_offense_before_and_after, #disable_offense_with_eol_or_surround_comment, #max_line_length, | |
#range_by_lines | Expand the given range to include all of any lines it covers. |
#range_of_first_line, #range_overlaps_offense?, #string_continuation, #string_continuation?, #surrounding_heredoc, #surrounding_percent_array |
::RuboCop::Cop::IgnoredNode
- Included
Constructor Details
This class inherits a constructor from RuboCop::Cop::Base
Instance Attribute Details
#enforce_first_argument_with_fixed_indentation? ⇒ Boolean
(readonly, private)
[ GitHub ]
# File 'lib/rubocop/cop/layout/first_array_element_indentation.rb', line 182
def enforce_first_argument_with_fixed_indentation? return false unless array_alignment_config['Enabled'] array_alignment_config['EnforcedStyle'] == 'with_fixed_indentation' end
Instance Method Details
#array_alignment_config (private)
[ GitHub ]# File 'lib/rubocop/cop/layout/first_array_element_indentation.rb', line 188
def array_alignment_config config.for_cop('Layout/ArrayAlignment') end
#autocorrect(corrector, node) (private)
[ GitHub ]# File 'lib/rubocop/cop/layout/first_array_element_indentation.rb', line 108
def autocorrect(corrector, node) AlignmentCorrector.correct(corrector, processed_source, node, @column_delta) end
#base_description(indent_base_type) (private)
Returns the description of what the correct indentation is based on.
# File 'lib/rubocop/cop/layout/first_array_element_indentation.rb', line 146
def base_description(indent_base_type) case indent_base_type when :left_brace_or_bracket 'the position of the opening bracket' when :first_column_after_left_parenthesis 'the first position after the preceding left parenthesis' when :parent_hash_key 'the parent hash key' else 'the start of the line where the left square bracket is' end end
#brace_alignment_style (private)
[ GitHub ]# File 'lib/rubocop/cop/layout/first_array_element_indentation.rb', line 112
def brace_alignment_style :align_brackets end
#check(array_node, left_parenthesis) (private)
[ GitHub ]# File 'lib/rubocop/cop/layout/first_array_element_indentation.rb', line 116
def check(array_node, left_parenthesis) return if ignored_node?(array_node) left_bracket = array_node.loc.begin first_elem = array_node.values.first if first_elem return if same_line?(first_elem, left_bracket) check_first(first_elem, left_bracket, left_parenthesis, 0) end check_right_bracket(array_node.loc.end, first_elem, left_bracket, left_parenthesis) end
#check_right_bracket(right_bracket, first_elem, left_bracket, left_parenthesis) (private)
[ GitHub ]# File 'lib/rubocop/cop/layout/first_array_element_indentation.rb', line 130
def check_right_bracket(right_bracket, first_elem, left_bracket, left_parenthesis) # if the right bracket is on the same line as the last value, accept return if /\S/.match?(right_bracket.source_line[0...right_bracket.column]) expected_column, indent_base_type = indent_base(left_bracket, first_elem, left_parenthesis) @column_delta = expected_column - right_bracket.column return if @column_delta.zero? msg = (indent_base_type) add_offense(right_bracket, message: msg) do |corrector| autocorrect(corrector, right_bracket) end end
#message(base_description) (private)
[ GitHub ]# File 'lib/rubocop/cop/layout/first_array_element_indentation.rb', line 159
def (base_description) format( MSG, configured_indentation_width: configured_indentation_width, base_description: base_description ) end
#message_for_right_bracket(indent_base_type) (private)
[ GitHub ]# File 'lib/rubocop/cop/layout/first_array_element_indentation.rb', line 167
def (indent_base_type) case indent_base_type when :left_brace_or_bracket 'Indent the right bracket the same as the left bracket.' when :first_column_after_left_parenthesis 'Indent the right bracket the same as the first position ' \ 'after the preceding left parenthesis.' when :parent_hash_key 'Indent the right bracket the same as the parent hash key.' \ else 'Indent the right bracket the same as the start of the line ' \ 'where the left bracket is.' end end
#on_array(node)
[ GitHub ]# 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_csend(node)
Alias for #on_send.
# File 'lib/rubocop/cop/layout/first_array_element_indentation.rb', line 104
alias on_csend on_send
#on_send(node) Also known as: #on_csend
[ GitHub ]# 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