Class: Collie::Linter::Rules::CircularReference
- Defined in:
- lib/collie/linter/rules/circular_reference.rb
Overview
Detects circular references that lead to infinite recursion
Constant Summary
Constants inherited from Base
Instance Method Summary collapse
Methods inherited from Base
#autocorrectable?, #initialize
Constructor Details
This class inherits a constructor from Collie::Linter::Base
Instance Method Details
#check(ast, _context = {}) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/collie/linter/rules/circular_reference.rb', line 15 def check(ast, _context = {}) @rules_map = build_rules_map(ast) @dependencies = build_dependency_graph productive_rules = compute_productive_rules strongly_connected_components.each do |component| next unless cyclic_component?(component) next if component.any? { |rule_name| productive_rules.include?(rule_name) } component.each do |rule_name| rule = @rules_map[rule_name] add_offense(rule, message: "Rule '#{rule_name}' is part of a non-productive circular reference") if rule end end @offenses end |