Class: Collie::Linter::Rules::RightRecursion

Inherits:
Base
  • Object
show all
Defined in:
lib/collie/linter/rules/right_recursion.rb

Overview

Detects right recursion and suggests left recursion conversion

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
# File 'lib/collie/linter/rules/right_recursion.rb', line 13

def check(ast, _context = {})
  analyzer = Analyzer::Recursion.new(ast)
  result = analyzer.analyze

  result[:right_recursive].each do |rule_name|
    rule = ast.rules.find { |r| r.name == 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