Class: Shirobai::Cop::Layout::BlockAlignment
- Inherits:
-
RuboCop::Cop::Base
- Object
- RuboCop::Cop::Base
- Shirobai::Cop::Layout::BlockAlignment
- Extended by:
- RuboCop::Cop::AutoCorrector
- Includes:
- RuboCop::Cop::ConfigurableEnforcedStyle, RuboCop::Cop::RangeHelp
- Defined in:
- lib/shirobai/cop/layout/block_alignment.rb
Overview
Drop-in Rust reimplementation of ‘Layout/BlockAlignment`.
Rust walks the AST once, reproducing stock’s ‘on_block` (and `on_numblock` / `on_itblock`): it picks the block’s alignment target by walking the lineage (‘block_end_align_target`), unwraps op_asgn / masgn LHS (`find_lhs_node`), and decides whether the closing token (`end` / `}`) is misaligned under the configured `EnforcedStyleAlignWith`. Each misaligned block returns its closing-token range, the formatted message (including the `either`-only “ or …” alternative), and the autocorrect target column (`compute_start_col`).
The autocorrect mirrors ‘BlockAlignment#autocorrect`: the delta between the target column and the closing token’s column is applied as inserted spaces before the token (positive delta) or removed leading whitespace (negative delta).
Offenses come from the per-file bundled run (‘Shirobai::Dispatch`); the style is purely config-driven, so this cop is always bundle eligible.
Constant Summary collapse
- STYLE_TO_U8 =
{ either: 0, start_of_block: 1, start_of_line: 2 }.freeze
Class Method Summary collapse
- .badge ⇒ Object
-
.bundle_args(config) ⇒ Object
Packed args for the bundled run: ‘[style]`.
- .cop_name ⇒ Object
Instance Method Summary collapse
- #on_new_investigation ⇒ Object
-
#style_parameter_name ⇒ Object
‘EnforcedStyleAlignWith` keys the style.
Class Method Details
.badge ⇒ Object
32 |
# File 'lib/shirobai/cop/layout/block_alignment.rb', line 32 def self.badge = RuboCop::Cop::Badge.parse(cop_name) |
.bundle_args(config) ⇒ Object
Packed args for the bundled run: ‘[style]`. `EnforcedStyleAlignWith` defaults to `either` (0) when the config does not mention this cop.
36 37 38 39 |
# File 'lib/shirobai/cop/layout/block_alignment.rb', line 36 def self.bundle_args(config) align = config.for_badge(badge)["EnforcedStyleAlignWith"] [STYLE_TO_U8.fetch((align || "either").to_sym, 0)] end |
.cop_name ⇒ Object
31 |
# File 'lib/shirobai/cop/layout/block_alignment.rb', line 31 def self.cop_name = "Layout/BlockAlignment" |
Instance Method Details
#on_new_investigation ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/shirobai/cop/layout/block_alignment.rb', line 41 def on_new_investigation buffer = processed_source.buffer off = SourceOffsets.for(processed_source.raw_source) records_for_source.each do |end_start, end_end, , align_column| end_range = Parser::Source::Range.new(buffer, off[end_start], off[end_end]) add_offense(end_range, message: ) do |corrector| autocorrect(corrector, buffer, end_range, align_column) end end end |
#style_parameter_name ⇒ Object
‘EnforcedStyleAlignWith` keys the style.
54 55 56 |
# File 'lib/shirobai/cop/layout/block_alignment.rb', line 54 def style_parameter_name "EnforcedStyleAlignWith" end |