Class: Shirobai::Cop::Naming::VariableNumber
- Inherits:
-
RuboCop::Cop::Base
- Object
- RuboCop::Cop::Base
- Shirobai::Cop::Naming::VariableNumber
- Includes:
- RuboCop::Cop::AllowedIdentifiers, RuboCop::Cop::AllowedPattern, RuboCop::Cop::ConfigurableNumbering
- Defined in:
- lib/shirobai/cop/naming/variable_number.rb
Overview
Drop-in Rust reimplementation of Naming/VariableNumber.
Rust walks the identifiers (parameters, variable assignments, method
names, symbols), applies the numbering check, and the AllowedIdentifiers
filter, returning only the offenders plus whether the configured style
was used correctly anywhere. Ruby keeps the AllowedPatterns filter and
the ConfigurableEnforcedStyle bookkeeping (config_to_allow_offenses).
Offenses come from the per-file bundled run (Shirobai::Dispatch); the
AllowedPatterns filter runs after the ext call either way, so this cop
is always bundle-eligible.
Constant Summary collapse
- MSG =
"Use %<style>s for %<identifier_type>s numbers."- STYLE_INDEX =
{ "snake_case" => 0, "normalcase" => 1, "non_integer" => 2 }.freeze
- INDEX_STYLE =
%i[snake_case normalcase non_integer].freeze
- TYPE_LABEL =
["variable", "method name", "symbol"].freeze
Class Method Summary collapse
- .badge ⇒ Object
-
.bundle_args(config) ⇒ Object
Packed args for the bundled run:
[style, flags, allowed_identifiers]. - .cop_name ⇒ Object
Instance Method Summary collapse
Class Method Details
.badge ⇒ Object
28 |
# File 'lib/shirobai/cop/naming/variable_number.rb', line 28 def self.badge = RuboCop::Cop::Badge.parse("Naming/VariableNumber") |
.bundle_args(config) ⇒ Object
Packed args for the bundled run: [style, flags, allowed_identifiers].
EnforcedStyle may be absent when the config does not mention this
cop (vendor specs of the other bundled cops, whose slice is then
discarded); default to style 0 in that case.
34 35 36 37 38 39 40 41 |
# File 'lib/shirobai/cop/naming/variable_number.rb', line 34 def self.bundle_args(config) cop_config = config.for_badge(badge) [ STYLE_INDEX[cop_config["EnforcedStyle"]] || 0, (cop_config["CheckMethodNames"] ? 2 : 0) | (cop_config["CheckSymbols"] ? 1 : 0), cop_config.fetch("AllowedIdentifiers") { [] } ] end |
.cop_name ⇒ Object
27 |
# File 'lib/shirobai/cop/naming/variable_number.rb', line 27 def self.cop_name = "Naming/VariableNumber" |
Instance Method Details
#on_new_investigation ⇒ Object
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 |
# File 'lib/shirobai/cop/naming/variable_number.rb', line 43 def on_new_investigation offenses, had_correct = Dispatch.offenses_for(processed_source, config, :variable_number) saw_correct = had_correct off = SourceOffsets.for(processed_source.raw_source) offenses.each do |start, fin, id_type, name, alt| # A name the Rust side flagged may still be exempt by AllowedPatterns, # in which case it counts as a correct use of the configured style. if matches_allowed_pattern?(name) saw_correct = true next end range = Parser::Source::Range.new(processed_source.buffer, off[start], off[fin]) = format(MSG, style: style, identifier_type: TYPE_LABEL[id_type]) add_offense(range, message: ) do if alt == 255 unrecognized_style_detected else unexpected_style_detected(INDEX_STYLE[alt]) end end end correct_style_detected if saw_correct end |