Class: Lrama::Warnings::ImplicitEmpty

Inherits:
Object
  • Object
show all
Defined in:
lib/lrama/warnings/implicit_empty.rb

Overview

Warning rationale: Empty rules are easily overlooked and ambiguous

  • Empty alternatives like rule: | "token"; can be missed during code reading
  • Difficult to distinguish between intentional empty rules vs. omissions
  • Explicit marking with %empty directive comment improves clarity

Instance Method Summary collapse

Constructor Details

#initialize(logger, warnings) ⇒ ImplicitEmpty

Returns a new instance of ImplicitEmpty.



12
13
14
15
# File 'lib/lrama/warnings/implicit_empty.rb', line 12

def initialize(logger, warnings)
  @logger = logger
  @warnings = warnings
end

Instance Method Details

#warn(grammar) ⇒ Object



18
19
20
21
22
23
24
25
26
# File 'lib/lrama/warnings/implicit_empty.rb', line 18

def warn(grammar)
  return unless @warnings

  grammar.rule_builders.each do |builder|
    if builder.rhs.empty?
      @logger.warn("warning: empty rule without %empty")
    end
  end
end