#[non_exhaustive]pub enum DiagnosticCode {
Show 22 variants
UnexpectedToken,
MissingToken,
UnterminatedDeclaration,
InvalidToken,
VendorExtension,
Unsupported,
InvalidAnnotation,
DuplicateName,
AmbiguousName,
UnresolvedName,
InvalidDiscriminator,
InvalidCaseLabel,
ConflictingAnnotations,
InvalidBound,
UndefinedForward,
DuplicateMemberId,
KeywordCollision,
PolicyAdvice,
TypeMismatch,
ErrorDirective,
InvalidInheritance,
Preprocessing,
}Expand description
A stable identifier for a diagnostic.
Stable across releases on purpose: a build that greps for a code has to keep working. Codes are appended, never renumbered or reused. Spec §7.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
UnexpectedToken
A token appeared where the grammar did not allow it.
MissingToken
A token the grammar requires was not there.
UnterminatedDeclaration
A declaration ran out before it was complete.
InvalidToken
The lexer could not make sense of a range.
VendorExtension
A construct only a vendor dialect admits, under the strict dialect.
Unsupported
A construct the grammar has but this parser does not implement yet. Reported rather than skipped, so a gap cannot pass for acceptance.
InvalidAnnotation
An annotation was written with an argument the specification does not define for it.
DuplicateName
A name is declared twice in one scope, case-insensitively.
AmbiguousName
A scoped name resolves to more than one declaration.
UnresolvedName
A name resolves to nothing.
InvalidDiscriminator
A union discriminator is not of a type IDL allows.
InvalidCaseLabel
A case label repeats, or lies outside the discriminator’s range.
ConflictingAnnotations
Two annotations on one node contradict each other.
InvalidBound
A bound, dimension or precision is outside its legal range.
UndefinedForward
A forward declaration was never defined.
DuplicateMemberId
Two members of one aggregate resolve to the same id.
KeywordCollision
An identifier differs from a keyword only in case, which OMG IDL 4.2 §7.2.4 makes illegal.
PolicyAdvice
A choice the specification permits and something downstream pays for.
Never produced by the parser or by lowering — both answer “is
this IDL”, and the answer here is always yes. It is the code
zerodds-idlc lint reports under, so a rule about a choice is
distinguishable from a rule about the language, by code and not
by which tool printed it.
TypeMismatch
A value is not of the type it was declared with.
IDL 4.2 §7.4.1.4.3 requires a constant’s value expression to be “consistent with the type declared for the constant”, and §7.2.6.3 states the wide/narrow string pair as a “compile-time diagnostic” in so many words.
ErrorDirective
A #error directive was reached.
ISO/IEC 14882:2003 §16.5, which IDL 4.2 §7.3 adopts: “#error causes the implementation to produce a diagnostic message that includes the specified sequence of preprocessing tokens.” Its own code because it is the one diagnostic the source asked for.
InvalidInheritance
A derived type breaks a rule inheritance places on it.
DDS-XTypes 1.3 §7.2.2.4.5: a derived structure has its base’s
extensibility or none of its own, and defines no key fields — its
keys are its root base’s. Duplicate names and member ids across the
hierarchy keep their own codes, Self::DuplicateName and
Self::DuplicateMemberId.
Preprocessing
A rule of the preprocessor ISO/IEC 14882:2003 §16 describes, which
IDL 4.2 §7.3 adopts: a macro invoked with the wrong number of
arguments, a # not followed by a parameter, a ## at either
end of a replacement list, a paste that does not form one token,
an #if expression that does not evaluate. As a warning: an
identifier in an #if that names no macro, which §16.1 evaluates
as 0.