Class: Shirobai::Cop::Style::HashTransformKeys
- Inherits:
-
RuboCop::Cop::Base
- Object
- RuboCop::Cop::Base
- Shirobai::Cop::Style::HashTransformKeys
- Extended by:
- RuboCop::Cop::AutoCorrector
- Defined in:
- lib/shirobai/cop/style/hash_transform_keys.rb
Overview
Drop-in Rust reimplementation of Style/HashTransformKeys.
Stock matches four shapes via the HashTransformMethod mixin
(each_with_object({}) / Hash[_.map {...}] / _.map{...}.to_h /
_.to_h{...}) and emits a sequence of corrector ops that strips
Hash[ / ] (or the trailing .to_h), swaps the selector to
transform_keys, rewrites the block arguments and replaces the body
with just the key transformation. Rust replays the same gating
(hash_receiver?, noop_transformation?, transformation_uses_both_args?,
use_transformed_argname?) on the prism tree and returns the offense
span plus an ordered list of (start, end, replacement) edits the
wrapper plays back verbatim via corrector.replace.
Class Method Summary collapse
- .badge ⇒ Object
-
.bundle_args(_config) ⇒ Object
Config-less from the bundle's point of view: no per-cop config influences detection or autocorrect.
- .cop_name ⇒ Object
Instance Method Summary collapse
Class Method Details
.badge ⇒ Object
22 |
# File 'lib/shirobai/cop/style/hash_transform_keys.rb', line 22 def self.badge = RuboCop::Cop::Badge.parse("Style/HashTransformKeys") |
.bundle_args(_config) ⇒ Object
Config-less from the bundle's point of view: no per-cop config
influences detection or autocorrect. (The cop's Enabled /
Exclude / etc. are honoured by the Team, not by us.)
27 |
# File 'lib/shirobai/cop/style/hash_transform_keys.rb', line 27 def self.bundle_args(_config) = [] |
.cop_name ⇒ Object
21 |
# File 'lib/shirobai/cop/style/hash_transform_keys.rb', line 21 def self.cop_name = "Style/HashTransformKeys" |
Instance Method Details
#on_new_investigation ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/shirobai/cop/style/hash_transform_keys.rb', line 29 def on_new_investigation buffer = processed_source.buffer offenses = Dispatch.offenses_for(processed_source, config, :hash_transform_keys) off = SourceOffsets.for(processed_source.raw_source) offenses.each do |start, fin, , edits| range = Parser::Source::Range.new(buffer, off[start], off[fin]) add_offense(range, message: ) do |corrector| edits.each do |edit_start, edit_end, replacement| edit_range = Parser::Source::Range.new(buffer, off[edit_start], off[edit_end]) corrector.replace(edit_range, replacement) end end end end |