class Parser::Diagnostic::Engine
{Parser::Diagnostic::Engine} provides a basic API for dealing with diagnostics by delegating them to registered consumers.
@example
buffer = Parser::Source::Buffer.new(__FILE__, source: 'foobar') consumer = lambda do |diagnostic| puts diagnostic.message end engine = Parser::Diagnostic::Engine.new(consumer) diagnostic = Parser::Diagnostic.new( :warning, :unexpected_token, { :token => 'abc' }, buffer, 1..2) engine.process(diagnostic) # => "unexpected token abc"
@api public
@!attribute [rw] consumer
@return [#call(Diagnostic)]
@!attribute [rw] all_errors_are_fatal
When set to `true` any error that is encountered will result in {Parser::SyntaxError} being raised. @return [Boolean]
@!attribute [rw] ignore_warnings
When set to `true` warnings will be ignored. @return [Boolean]
Attributes
Public Class Methods
Source
# File lib/parser/diagnostic/engine.rb, line 45 def initialize(consumer=nil) @consumer = consumer @all_errors_are_fatal = false @ignore_warnings = false end
@param [#call(Diagnostic
)] consumer
Public Instance Methods
Source
# File lib/parser/diagnostic/engine.rb, line 64 def process(diagnostic) if ignore?(diagnostic) # do nothing elsif @consumer @consumer.call(diagnostic) end if raise?(diagnostic) raise Parser::SyntaxError, diagnostic end self end
Processes a ‘diagnostic`:
* Passes the diagnostic to the consumer, if it's not a warning when `ignore_warnings` is set. * After that, raises {Parser::SyntaxError} when `all_errors_are_fatal` is set to true.
@param [Parser::Diagnostic] diagnostic @return [Parser::Diagnostic::Engine] @see ignore? @see raise?
Protected Instance Methods
Source
# File lib/parser/diagnostic/engine.rb, line 86 def ignore?(diagnostic) @ignore_warnings && diagnostic.level == :warning end
Checks whether ‘diagnostic` should be ignored.
@param [Parser::Diagnostic] diagnostic @return [Boolean]
Source
# File lib/parser/diagnostic/engine.rb, line 97 def raise?(diagnostic) (@all_errors_are_fatal && diagnostic.level == :error) || diagnostic.level == :fatal end
Checks whether ‘diagnostic` should be raised as an exception.
@param [Parser::Diagnostic] diagnostic @return [Boolean]