Class: Shirobai::Cop::Style::StringLiteralsInInterpolation
- Inherits:
-
RuboCop::Cop::Base
- Object
- RuboCop::Cop::Base
- Shirobai::Cop::Style::StringLiteralsInInterpolation
- Extended by:
- RuboCop::Cop::AutoCorrector
- Includes:
- RuboCop::Cop::ConfigurableEnforcedStyle, RuboCop::Cop::Util
- Defined in:
- lib/shirobai/cop/style/string_literals_in_interpolation.rb
Overview
Drop-in Rust reimplementation of Style/StringLiteralsInInterpolation.
The interpolation counterpart of Style/StringLiterals: Rust walks every
string literal once, replicating stock's StringHelp#on_str with this
cop's inverted interpolation guard. A :str node offends iff it is
inside an interpolation (#{...} of a string / symbol / regexp) and its
quotes are wrong_quotes? for the configured EnforcedStyle; a
non-offending :str with a begin loc emits a correct_style_detected
marker. Heredoc and physical-newline (multi-line) :str nodes are skipped
exactly as parser-gem skips them (no begin loc / :dstr split).
For each record Rust returns, in walk order, whether it offends, the caret
range, the detection marker to replay, and — for an offense — which
autocorrect to apply (single / double) plus the decoded string
content. The replacement text is computed here with stock's genuine
RuboCop::Cop::Util helpers (to_string_literal / String#inspect),
and the detection markers are replayed through the genuine
ConfigurableEnforcedStyle methods so config_to_allow_offenses matches
stock exactly.
Always bundle-eligible: the result is purely config-driven.
Constant Summary collapse
- STYLES =
{ "single_quotes" => 0, "double_quotes" => 1 }.freeze
- FIX_SINGLE =
Fix kinds (mirror
string_literals_in_interpolation.rs). 0- FIX_DOUBLE =
1
Class Method Summary collapse
- .badge ⇒ Object
-
.bundle_args(config) ⇒ Object
Packed config nums:
[style]. - .cop_name ⇒ Object
Instance Method Summary collapse
Class Method Details
.badge ⇒ Object
42 |
# File 'lib/shirobai/cop/style/string_literals_in_interpolation.rb', line 42 def self.badge = RuboCop::Cop::Badge.parse("Style/StringLiteralsInInterpolation") |
.bundle_args(config) ⇒ Object
Packed config nums: [style].
45 46 47 48 49 50 |
# File 'lib/shirobai/cop/style/string_literals_in_interpolation.rb', line 45 def self.bundle_args(config) cop_config = config.for_badge(badge) # An unrecognized `EnforcedStyle` defaults to single here; the genuine # error is raised by the `style` accessor in `on_new_investigation`. [[STYLES.fetch(cop_config["EnforcedStyle"] || "single_quotes", 0)]] end |
.cop_name ⇒ Object
41 |
# File 'lib/shirobai/cop/style/string_literals_in_interpolation.rb', line 41 def self.cop_name = "Style/StringLiteralsInInterpolation" |
Instance Method Details
#alternative_style ⇒ Object
76 77 78 79 80 81 82 83 |
# File 'lib/shirobai/cop/style/string_literals_in_interpolation.rb', line 76 def alternative_style case style when :single_quotes :double_quotes else :single_quotes end end |
#on_new_investigation ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/shirobai/cop/style/string_literals_in_interpolation.rb', line 52 def on_new_investigation # Validate `EnforcedStyle` through the genuine accessor first: stock # raises `RuntimeError` for an unrecognized style, and this must fire # before we derive the bundle config (which would otherwise raise a # `KeyError` for the unknown key). style buffer = processed_source.buffer off = SourceOffsets.for(processed_source.raw_source) resolved_result.each do |is_offense, start, fin, detect, fix, content| unless is_offense replay_detection(detect) next end range = Parser::Source::Range.new(buffer, off[start], off[fin]) add_offense(range, message: ) do |corrector| apply_fix(corrector, range, fix, content) replay_detection(detect) end end end |