Collects parse warnings during parsing. More...
#include "donner/base/ParseWarningSink.h"
Public Member Functions | |
| ParseWarningSink ()=default | |
| Construct a sink that collects warnings. | |
| bool | isEnabled () const |
| Returns true if the sink is enabled (will store warnings). | |
| template<typename Factory> requires std::invocable<Factory> && std::same_as<std::invoke_result_t<Factory>, ParseDiagnostic> | |
| void | add (Factory &&factory) |
| Add a warning via a factory callable. | |
| void | add (ParseDiagnostic &&warning) |
| Add a pre-constructed warning (for cases where the diagnostic is already built). | |
| const std::vector< ParseDiagnostic > & | warnings () const |
| Access the collected warnings. | |
| bool | hasWarnings () const |
| Returns true if any warnings have been added. | |
| bool | resourceLimitExceeded () const |
| Returns true if warnings were discarded to enforce a resource limit. | |
| std::size_t | warningBytes () const |
| Aggregate bytes retained for warning messages. | |
| template<typename Mapper> requires std::invocable<Mapper&, const SourceRange&> && std::same_as<std::invoke_result_t<Mapper&, const SourceRange&>, SourceRange> | |
| void | mapSourceRanges (Mapper &&mapper) |
| Remap stored source ranges without changing warning text, severity, or admission accounting. | |
| void | merge (ParseWarningSink &&other) |
| Merge all warnings from another sink into this one. | |
| void | mergeFromSubparser (ParseWarningSink &&other, FileOffset parentOffset) |
| Merge warnings from a subparser, remapping source ranges using the given parent offset. | |
Static Public Member Functions | |
| static ParseWarningSink | Disabled () |
| Construct a disabled sink that discards all warnings (no-op). | |
Collects parse warnings during parsing.
Always safe to call add() on—when disabled, warnings are silently dropped without invoking the factory callable, implicitly avoiding string formatting overhead.
Replaces the std::vector<ParseDiagnostic>* outWarnings pattern.
Usage:
|
inline |
Add a warning via a factory callable.
The callable is only invoked when the sink is enabled and has not reached a resource limit, implicitly avoiding formatting overhead when warnings are disabled. Once kMaximumWarnings or kMaximumWarningBytes would be exceeded, this and every later warning is dropped and resourceLimitExceeded returns true.
| Factory | A callable returning ParseDiagnostic. |
| factory | Callable that builds the warning. |
|
inline |
Remap stored source ranges without changing warning text, severity, or admission accounting.
| mapper | Callable taking a source range and returning its replacement range. |
|
inline |
Merge warnings from a subparser, remapping source ranges using the given parent offset.
Each warning's range.start and range.end are remapped via addParentOffset(parentOffset), translating them from the subparser's local coordinate space to the parent's.
| other | Subparser's warning sink to merge from. |
| parentOffset | The offset of the subparser's input within the parent input. |