Module: Shirobai::Cop::Layout::EmptyLinesAroundBodyShared
- Included in:
- EmptyLinesAroundBeginBody, EmptyLinesAroundBlockBody, EmptyLinesAroundClassBody, EmptyLinesAroundExceptionHandlingKeywords, EmptyLinesAroundMethodBody, EmptyLinesAroundModuleBody
- Defined in:
- lib/shirobai/cop/layout/empty_lines_around_body_shared.rb
Overview
Shared offense-reporting logic for the ‘EmptyLinesAroundBody` mixin family (method/class/module/block/begin bodies and the exception-handling-keywords variant).
Rust replicates the mixin’s line arithmetic (‘check_beginning` / `check_ending` / `check_deferred_empty_line` and the keyword loop) in one shared-walk rule and returns, per cop, the offense range (the first character of the offense line, exactly stock’s ‘source_range(buffer, line, 0)`), the message and which `EmptyLineCorrector` arm applies (remove the range / insert a `“n”` before it). Stock’s ‘add_offense` range-dedup (e.g. the begin and end checks of `class Foonnend` hitting the same blank line) is inherited for free by emitting in stock’s order. The including cop selects its result slot via ‘SLOT`; the three configurable cops pack their `EnforcedStyle` through `bundle_args`, so the family is always bundle-eligible.
Constant Summary collapse
- STYLES =
‘SupportedStyles` order of `Layout/EmptyLinesAroundClassBody`, mirrored by the Rust style constants.
{ "no_empty_lines" => 0, "empty_lines" => 1, "empty_lines_except_namespace" => 2, "empty_lines_special" => 3, "beginning_only" => 4, "ending_only" => 5 }.freeze
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.style_num(config, badge) ⇒ Object
34 35 36 |
# File 'lib/shirobai/cop/layout/empty_lines_around_body_shared.rb', line 34 def self.style_num(config, badge) STYLES.fetch(config.for_badge(badge)["EnforcedStyle"] || "no_empty_lines") end |
Instance Method Details
#on_new_investigation ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/shirobai/cop/layout/empty_lines_around_body_shared.rb', line 38 def on_new_investigation buffer = processed_source.buffer offenses = Dispatch.offenses_for(processed_source, config, self.class::SLOT) off = SourceOffsets.for(processed_source.raw_source) offenses.each do |start, fin, insert, | range = Parser::Source::Range.new(buffer, off[start], off[fin]) add_offense(range, message: ) do |corrector| # EmptyLineCorrector.correct if insert corrector.insert_before(range, "\n") else corrector.remove(range) end end end end |