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
-
.tier ⇒ Object
Autocorrection tier: :suggested -- mechanical and low-risk; applied by --fix :unsafe -- correct in-file but may break cross-file call sites; applied only by --fix-unsafe :none -- advice only, no corrector.
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.
47 48 49 |
# File 'lib/why_classes/rule.rb', line 47 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? tier != :none 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
40 41 42 43 44 |
# File 'lib/why_classes/rule.rb', line 40 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 |
.tier ⇒ Object
Autocorrection tier:
:suggested -- mechanical and low-risk; applied by --fix
:unsafe -- correct in-file but may break cross-file call sites;
applied only by --fix-unsafe
:none -- advice only, no corrector
36 37 38 |
# File 'lib/why_classes/rule.rb', line 36 def tier :none end |
Instance Method Details
#call(source_file) ⇒ Object
Run this rule over a SourceFile and return its offenses.
52 53 54 55 56 57 |
# File 'lib/why_classes/rule.rb', line 52 def call(source_file) @source_file = source_file @offenses = [] walk(source_file.ast) @offenses end |