Class: Collie::Linter::Rules::RightRecursion
- Defined in:
- lib/collie/linter/rules/right_recursion.rb
Overview
Detects right recursion and suggests left recursion conversion
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
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/collie/linter/rules/right_recursion.rb', line 13 def check(ast, _context = {}) analyzer = Analyzer::Recursion.new(ast) result = analyzer.analyze left_recursive = result[:left_recursive] result[:right_recursive].each do |rule_name| next if left_recursive.include?(rule_name) rule = find_rule_like(ast, rule_name) next unless rule add_offense( rule, message: "Rule '#{rule_name}' uses right recursion " \ "(consider left recursion for better LR parser performance)" ) end @offenses end |