Class: Shirobai::Cop::Naming::MethodName
- Inherits:
-
RuboCop::Cop::Base
- Object
- RuboCop::Cop::Base
- Shirobai::Cop::Naming::MethodName
- Includes:
- RuboCop::Cop::AllowedPattern, RuboCop::Cop::ConfigurableNaming, RuboCop::Cop::ForbiddenIdentifiers, RuboCop::Cop::ForbiddenPattern
- Defined in:
- lib/shirobai/cop/naming/method_name.rb
Overview
Drop-in Rust reimplementation of ‘Naming/MethodName`.
Rust walks the method-name sites (‘def`/`defs`, `define_method`, `Struct.new`/`Data.define` members, `alias`/`alias_method` arguments and `attr_*` accessors), filters out operator methods, computes whether each name matches the configured `EnforcedStyle` (and which alternative style it matches otherwise), including the class-emitter-method exception, and returns the offense candidates. Ruby keeps the `AllowedPatterns`, `ForbiddenIdentifiers` and `ForbiddenPatterns` filters and the `ConfigurableEnforcedStyle` bookkeeping (`config_to_allow_offenses`). When none of those filters is configured, Rust only returns the invalid sites (see `on_new_investigation`).
Constant Summary collapse
- MSG =
"Use %<style>s for method names."- MSG_FORBIDDEN =
"`%<identifier>s` is forbidden, use another method name instead."- STYLE_INDEX =
{ "snake_case" => 0, "camelCase" => 1 }.freeze
- INDEX_STYLE =
%i[snake_case camelCase].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
31 |
# File 'lib/shirobai/cop/naming/method_name.rb', line 31 def self.badge = RuboCop::Cop::Badge.parse("Naming/MethodName") |
.bundle_args(config) ⇒ Object
Packed args for the bundled run: ‘[style]`. The bundle always computes the filtered flavor (see `bundle_eligible?`). `EnforcedStyle` may be absent when the config does not mention this cop (the slice is then discarded); default to style 0 in that case.
37 38 39 |
# File 'lib/shirobai/cop/naming/method_name.rb', line 37 def self.bundle_args(config) [STYLE_INDEX[config.for_badge(badge)["EnforcedStyle"]] || 0] end |
.cop_name ⇒ Object
30 |
# File 'lib/shirobai/cop/naming/method_name.rb', line 30 def self.cop_name = "Naming/MethodName" |
Instance Method Details
#on_new_investigation ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/shirobai/cop/naming/method_name.rb', line 41 def on_new_investigation # Fast path: with no AllowedPatterns / ForbiddenIdentifiers / # ForbiddenPatterns configured (the default), the style-compliant # sites can only ever feed `correct_style_detected`, so Rust drops # them and reports their existence as a flag instead. `style_detected` # is idempotent set-intersection bookkeeping (sticky # `no_acceptable_style!`), so one call is observably identical to one # call per compliant site, in any order relative to # `unexpected_style_detected`. fast = bundle_eligible? candidates, had_valid = if fast Dispatch.offenses_for(processed_source, config, :method_name) else Shirobai.check_method_name(processed_source.raw_source, style_u8, false) end correct_style_detected if fast && had_valid off = SourceOffsets.for(processed_source.raw_source) candidates.each do |start, fin, name, valid, alt, fb_start, fb_end, fb_name| next if matches_allowed_pattern?(name) if forbidden_name?(name) fb_range = Parser::Source::Range.new(processed_source.buffer, off[fb_start], off[fb_end]) add_offense(fb_range, message: format(MSG_FORBIDDEN, identifier: fb_name)) elsif valid correct_style_detected else range = Parser::Source::Range.new(processed_source.buffer, off[start], off[fin]) add_offense(range, message: format(MSG, style: style)) do if alt == 255 unrecognized_style_detected else unexpected_style_detected(INDEX_STYLE[alt]) end end end end end |