Class: Shirobai::Cop::Layout::ElseAlignment
- Inherits:
-
RuboCop::Cop::Base
- Object
- RuboCop::Cop::Base
- Shirobai::Cop::Layout::ElseAlignment
- Extended by:
- RuboCop::Cop::AutoCorrector
- Includes:
- RuboCop::Cop::RangeHelp
- Defined in:
- lib/shirobai/cop/layout/else_alignment.rb
Overview
Drop-in Rust reimplementation of Layout/ElseAlignment.
Rust walks the AST once, reproducing stock's callbacks: on_if /
on_case / on_case_match / on_rescue and the CheckAssignment
family. Each else / elsif keyword (and the else of a case /
begin / def / block rescue chain) is checked against the construct
it belongs to; elsif chains carry the same base down the recursion, and
an if on an assignment RHS aligns with the assignment node
(variable) or the if (keyword) per Layout/EndAlignment's
EnforcedStyleAlignWith. Per misaligned keyword Rust returns the keyword
range, the formatted message, and the signed column delta.
The autocorrect mirrors AlignmentCorrector.correct for the single-line
keyword range: shift the keyword's line by the column delta (insert
spaces at the line start for a positive delta, remove leading whitespace
for a negative one). As in stock, the correction is skipped (offense
still registered) when Layout/IndentationStyle is tabs.
Offenses come from the per-file bundled run (Shirobai::Dispatch); the
behaviour is purely config-driven, so this cop is always bundle eligible.
Constant Summary collapse
- STYLE_TO_U8 =
{ keyword: 0, variable: 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
Class Method Details
.badge ⇒ Object
33 |
# File 'lib/shirobai/cop/layout/else_alignment.rb', line 33 def self.badge = RuboCop::Cop::Badge.parse(cop_name) |
.bundle_args(config) ⇒ Object
Packed args for the bundled run: [style]. ElseAlignment reads
Layout/EndAlignment's EnforcedStyleAlignWith (default keyword).
37 38 39 40 |
# File 'lib/shirobai/cop/layout/else_alignment.rb', line 37 def self.bundle_args(config) align = config.for_cop("Layout/EndAlignment")["EnforcedStyleAlignWith"] [STYLE_TO_U8.fetch((align || "keyword").to_sym, 0)] end |
.cop_name ⇒ Object
32 |
# File 'lib/shirobai/cop/layout/else_alignment.rb', line 32 def self.cop_name = "Layout/ElseAlignment" |
Instance Method Details
#on_new_investigation ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/shirobai/cop/layout/else_alignment.rb', line 42 def on_new_investigation buffer = processed_source.buffer off = SourceOffsets.for(processed_source.raw_source) tabs = using_tabs? records_for_source.each do |else_start, else_end, , column_delta| else_range = Parser::Source::Range.new(buffer, off[else_start], off[else_end]) add_offense(else_range, message: ) do |corrector| next if tabs align_keyword(corrector, buffer, else_range, column_delta) end end end |