Class: WhyClasses::Rule

Inherits:
Object
  • Object
show all
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.

Constant Summary collapse

H =
AST::NodeHelpers

Class Method Summary collapse

Instance Method Summary collapse

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.

Returns:

  • (Boolean)


27
28
29
# File 'lib/why_classes/rule.rb', line 27

def autocorrectable?
  false
end

.descriptionObject

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_nameObject



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