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 |