Class: Collie::Linter::Rules::LeftRecursion

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

Overview

Detects left recursion in grammar rules

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

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

  result[:left_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 left recursion (consider using right recursion for LL parsers)"
    )
  end

  @offenses
end