Class: RuboCop::Cop::Layout::IndentationConsistency
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/indentation_consistency.rb |
Overview
Checks for inconsistent indentation.
The difference between indented_internal_methods
and normal
is
that the indented_internal_methods
style prescribes that in
classes and modules the protected
and private
modifier keywords
shall be indented the same as public methods and that protected and
private members shall be indented one step more than the modifiers.
Other than that, both styles mean that entities on the same logical
depth shall have the same indentation.
Constant Summary
-
MSG =
# File 'lib/rubocop/cop/layout/indentation_consistency.rb', line 126'Inconsistent indentation detected.'
::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
::RuboCop::Cop::ConfigurableEnforcedStyle
- Included
::RuboCop::Cop::Alignment
- Included
::RuboCop::Cop::Base
- Inherited
::RuboCop::Cop::AutocorrectLogic
- Included
Instance Method Summary
- #on_begin(node)
- #on_kwbegin(node)
- #autocorrect(corrector, node) private
-
#bare_access_modifier?(node) ⇒ Boolean
private
Not all nodes define #bare_access_modifier? (for example,
RuboCop::AST::DefNode
does not), so we must checksend_type?
first to avoid a NoMethodError. -
#base_column_for_normal_style(node)
private
Returns an integer representing the correct indentation, or nil to indicate that the correct indentation is that of the first child that is not an access modifier.
- #check(node) private
- #check_indented_internal_methods_style(node) private
- #check_normal_style(node) private
::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 Method Details
#autocorrect(corrector, node) (private)
[ GitHub ]# File 'lib/rubocop/cop/layout/indentation_consistency.rb', line 138
def autocorrect(corrector, node) AlignmentCorrector.correct(corrector, processed_source, node, column_delta) end
#bare_access_modifier?(node) ⇒ Boolean
(private)
Not all nodes define bare_access_modifier?
(for example,
RuboCop::AST::DefNode
does not), so we must check send_type?
first
to avoid a NoMethodError.
# File 'lib/rubocop/cop/layout/indentation_consistency.rb', line 145
def (node) node.send_type? && node. end
#base_column_for_normal_style(node) (private)
Returns an integer representing the correct indentation, or nil to indicate that the correct indentation is that of the first child that is not an access modifier.
# File 'lib/rubocop/cop/layout/indentation_consistency.rb', line 152
def base_column_for_normal_style(node) first_child = node.children.first return unless first_child && (first_child) # If, as is most common, the access modifier is indented deeper than # the module (`access_modifier_indent > module_indent`) then the # indentation of the access modifier determines the correct # indentation. # # Otherwise, in the rare event that the access modifier is outdented # to the level of the module (see `AccessModifierIndentation` cop) we # return nil so that `check_alignment` will derive the correct # indentation from the first child that is not an access modifier. access_modifier_indent = display_column(first_child.source_range) return access_modifier_indent unless node.parent module_indent = display_column(node.parent.source_range) access_modifier_indent if access_modifier_indent > module_indent end
#check(node) (private)
[ GitHub ]# File 'lib/rubocop/cop/layout/indentation_consistency.rb', line 172
def check(node) if style == :indented_internal_methods check_indented_internal_methods_style(node) else check_normal_style(node) end end
#check_indented_internal_methods_style(node) (private)
[ GitHub ]# File 'lib/rubocop/cop/layout/indentation_consistency.rb', line 187
def check_indented_internal_methods_style(node) children_to_check = [[]] node.children.each do |child| # Modifier nodes have special indentation and will be checked by # the AccessModifierIndentation cop. This cop uses them as dividers # in indented_internal_methods mode. Then consistency is checked # only within each section delimited by a modifier node. if (child) children_to_check << [] else children_to_check.last << child end end children_to_check.each { |group| check_alignment(group) } end
#check_normal_style(node) (private)
[ GitHub ]# File 'lib/rubocop/cop/layout/indentation_consistency.rb', line 180
def check_normal_style(node) check_alignment( node.children.reject { |child| (child) }, base_column_for_normal_style(node) ) end
#on_begin(node)
[ GitHub ]# File 'lib/rubocop/cop/layout/indentation_consistency.rb', line 128
def on_begin(node) check(node) end
#on_kwbegin(node)
[ GitHub ]# File 'lib/rubocop/cop/layout/indentation_consistency.rb', line 132
def on_kwbegin(node) check(node) end