Class: WhyClasses::Rule
- Inherits:
-
Object
- Object
- WhyClasses::Rule
- Defined in:
- lib/why_classes/rule.rb
Overview
Base class for every detector. A rule walks the parser-style AST, dispatches
to on_<type> handlers a subclass defines, and emits Offenses via
#add_offense. Rules never mutate source; a correctable offense carries a
corrector callable that queues edits on a Parser::Source::TreeRewriter.
Direct Known Subclasses
WhyClasses::Rules::DataBucket, WhyClasses::Rules::FunctionBucket, WhyClasses::Rules::InheritanceForMixins, WhyClasses::Rules::InvalidInitialState, WhyClasses::Rules::SingleAttributeReader, WhyClasses::Rules::StatelessSingletonMethods
Constant Summary collapse
- H =
AST::NodeHelpers
Class Method Summary collapse
-
.autocorrectable? ⇒ Boolean
Whether this rule can ever autocorrect.
-
.description ⇒ Object
Human-readable one-liner shown by
--list-rules. - .inherited(subclass) ⇒ Object
- .rule_name ⇒ Object
Instance Method Summary collapse
-
#call(source_file) ⇒ Object
Run this rule over a SourceFile and return its offenses.
-
#initialize(configuration) ⇒ Rule
constructor
A new instance of Rule.
Constructor Details
#initialize(configuration) ⇒ Rule
Returns a new instance of Rule.
38 39 40 |
# File 'lib/why_classes/rule.rb', line 38 def initialize(configuration) @configuration = configuration end |
Class Method Details
.autocorrectable? ⇒ Boolean
Whether this rule can ever autocorrect. Advice-only rules return false.
27 28 29 |
# File 'lib/why_classes/rule.rb', line 27 def autocorrectable? false end |
.description ⇒ Object
Human-readable one-liner shown by --list-rules. Override in subclasses.
22 23 24 |
# File 'lib/why_classes/rule.rb', line 22 def description "" end |
.inherited(subclass) ⇒ Object
31 32 33 34 35 |
# File 'lib/why_classes/rule.rb', line 31 def inherited(subclass) super # Anonymous subclasses (in specs) are not registered. Registry.register(subclass) unless subclass.name.nil? end |
.rule_name ⇒ Object
17 18 19 |
# File 'lib/why_classes/rule.rb', line 17 def rule_name name.split("::").last end |
Instance Method Details
#call(source_file) ⇒ Object
Run this rule over a SourceFile and return its offenses.
43 44 45 46 47 48 |
# File 'lib/why_classes/rule.rb', line 43 def call(source_file) @source_file = source_file @offenses = [] walk(source_file.ast) @offenses end |