Class: Shirobai::Cop::Style::NestedParenthesizedCalls
- Inherits:
-
RuboCop::Cop::Base
- Object
- RuboCop::Cop::Base
- Shirobai::Cop::Style::NestedParenthesizedCalls
- Extended by:
- RuboCop::Cop::AutoCorrector
- Defined in:
- lib/shirobai/cop/style/nested_parenthesized_calls.rb
Overview
Drop-in Rust reimplementation of Style/NestedParenthesizedCalls.
Detection and autocorrect both happen in Rust; Ruby turns the byte
offsets handed back into offenses and corrector ops. The corrector
builds an range_with_surrounding_space(side: :left) analogue
([ac_open_start, ac_open_end) → () plus an insert_after at
ac_close_pos, matching stock byte-for-byte.
AllowedMethods is taken from the cop's own config (plus the deprecated
IgnoredMethods / ExcludedMethods aliases for parity with stock's
AllowedMethods mixin). Regexp entries are not supported on the
bundle path; if any regexp is configured, the wrapper falls back to the
standalone per-cop call instead.
Constant Summary collapse
- MSG =
"Add parentheses to nested method call `%<source>s`."
Class Method Summary collapse
- .badge ⇒ Object
-
.bundle_args(config) ⇒ Object
Returns
[allowed_methods]. - .cop_name ⇒ Object
Instance Method Summary collapse
Class Method Details
.badge ⇒ Object
25 |
# File 'lib/shirobai/cop/style/nested_parenthesized_calls.rb', line 25 def self.badge = RuboCop::Cop::Badge.parse("Style/NestedParenthesizedCalls") |
.bundle_args(config) ⇒ Object
Returns [allowed_methods]. allowed_methods mirrors the stock
AllowedMethods mixin: AllowedMethods + deprecated IgnoredMethods
ExcludedMethods, withRegexpentries dropped (the bundle path accepts string names only). When any regexp is presentbundle_argsstill returns the strings; the wrapper detects the regexp inbundle_eligible?and uses the standalone path instead.
33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/shirobai/cop/style/nested_parenthesized_calls.rb', line 33 def self.bundle_args(config) cfg = config.for_badge(badge) allowed = Array(cfg.fetch("AllowedMethods", [])) deprecated = Array(cfg.fetch("IgnoredMethods", [])) + Array(cfg.fetch("ExcludedMethods", [])) # Stock keeps deprecated entries unless there's a Regexp in any list; # in that case stock returns only `AllowedMethods` (regardless of # type). We approximate by always concatenating both and filtering # Regexps out (rare in practice, and we fall back when present). names = (allowed + deprecated).reject { |e| e.is_a?(Regexp) }.map(&:to_s) [names] end |
.cop_name ⇒ Object
24 |
# File 'lib/shirobai/cop/style/nested_parenthesized_calls.rb', line 24 def self.cop_name = "Style/NestedParenthesizedCalls" |
Instance Method Details
#bundle_eligible? ⇒ Boolean
46 47 48 49 50 51 52 53 |
# File 'lib/shirobai/cop/style/nested_parenthesized_calls.rb', line 46 def bundle_eligible? cfg = cop_config [ Array(cfg.fetch("AllowedMethods", [])), Array(cfg.fetch("IgnoredMethods", [])), Array(cfg.fetch("ExcludedMethods", [])) ].flatten.none? { |e| e.is_a?(Regexp) } end |
#on_new_investigation ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/shirobai/cop/style/nested_parenthesized_calls.rb', line 55 def on_new_investigation buffer = processed_source.buffer off = SourceOffsets.for(processed_source.raw_source) offenses = fetch_offenses offenses.each do |start_offset, end_offset, ac_open_start, ac_open_end, ac_close_pos| range = Parser::Source::Range.new(buffer, off[start_offset], off[end_offset]) = format(MSG, source: range.source) add_offense(range, message: ) do |corrector| open_range = Parser::Source::Range.new( buffer, off[ac_open_start], off[ac_open_end] ) close_range = Parser::Source::Range.new( buffer, off[ac_close_pos], off[ac_close_pos] ) corrector.replace(open_range, "(") corrector.insert_after(close_range, ")") end end end |