Class: Shirobai::Cop::Layout::IndentationConsistency
- Inherits:
-
RuboCop::Cop::Base
- Object
- RuboCop::Cop::Base
- Shirobai::Cop::Layout::IndentationConsistency
- Extended by:
- RuboCop::Cop::AutoCorrector
- Includes:
- RuboCop::Cop::Alignment, RuboCop::Cop::ConfigurableEnforcedStyle
- Defined in:
- lib/shirobai/cop/layout/indentation_consistency.rb
Overview
Drop-in Rust reimplementation of Layout/IndentationConsistency.
Rust walks the AST, reproduces the stock cop's on_begin / on_kwbegin
over every multi-statement group (a parser-gem begin / kwbegin),
runs check_alignment (base column from the first child or
base_column_for_normal_style, sections split by private / protected
in indented_internal_methods style) and returns, per offending child,
its range, the column_delta and whether it is autocorrectable (false
when the child's range is within? an already-registered offense in the
same pass — @current_offenses). Ruby applies the realignment via
AlignmentCorrector, the same division of labour as the other
indentation cops. Offenses come from the per-file bundled run
(Shirobai::Dispatch); the autocorrect re-passes go through the
standalone entry point.
Constant Summary collapse
- MSG =
"Inconsistent indentation detected."
Class Method Summary collapse
- .badge ⇒ Object
-
.bundle_args(config) ⇒ Object
Packed args for the bundled run:
[indented_internal_methods]. - .cop_name ⇒ Object
Instance Method Summary collapse
Class Method Details
.badge ⇒ Object
28 |
# File 'lib/shirobai/cop/layout/indentation_consistency.rb', line 28 def self.badge = RuboCop::Cop::Badge.parse("Layout/IndentationConsistency") |
.bundle_args(config) ⇒ Object
Packed args for the bundled run: [indented_internal_methods].
31 32 33 34 |
# File 'lib/shirobai/cop/layout/indentation_consistency.rb', line 31 def self.bundle_args(config) cop_config = config.for_badge(badge) [(cop_config["EnforcedStyle"] || "normal") == "indented_internal_methods" ? 1 : 0] end |
.cop_name ⇒ Object
27 |
# File 'lib/shirobai/cop/layout/indentation_consistency.rb', line 27 def self.cop_name = "Layout/IndentationConsistency" |
Instance Method Details
#on_new_investigation ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/shirobai/cop/layout/indentation_consistency.rb', line 36 def on_new_investigation buffer = processed_source.buffer off = SourceOffsets.for(processed_source.raw_source) offenses_for_source.each do |start, fin, column_delta, autocorrect| range = Parser::Source::Range.new(buffer, off[start], off[fin]) # Mirror the per-offense split (see argument_alignment): in lint mode # the block still runs and a non-empty corrector keeps the offense # correctable to match stock; `autocorrect` is false when the offense # is nested in an already-corrected range and must be reported only. unless autocorrect add_offense(range, message: MSG) next end add_offense(range, message: MSG) do |corrector| node = node_at(off[start], off[fin]) target = node || range RuboCop::Cop::AlignmentCorrector.correct( corrector, processed_source, target, column_delta ) end end end |