use duck_diagnostic::{DiagnosticCode, Severity};
use serde::{Deserialize, Serialize};
pub mod metadata;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum Code {
#[cfg(feature = "lexer")]
InvalidCharacter,
#[cfg(feature = "lexer")]
InvalidFrontMatter,
#[cfg(feature = "lexer")]
UnterminatedString,
#[cfg(feature = "lexer")]
UnterminatedExpression,
#[cfg(feature = "lexer")]
UnexpectedEof,
#[cfg(feature = "lexer")]
InvalidJsxSelfClosingTag,
#[cfg(feature = "lexer")]
UnterminatedJsxTag,
#[cfg(feature = "lexer")]
InvalidJsxClosingTag,
#[cfg(feature = "lexer")]
InvalidJsxAttribute,
#[cfg(feature = "lexer")]
UnterminatedCodeBlock,
#[cfg(feature = "lexer")]
EmptyFrontMatter,
#[cfg(feature = "parser")]
UnterminatedLink,
#[cfg(feature = "parser")]
UnterminatedImage,
#[cfg(feature = "parser")]
UnterminatedInlineCode,
#[cfg(feature = "parser")]
UnterminatedCodeBlockBlock,
#[cfg(feature = "parser")]
UnterminatedJsxOpenTag,
#[cfg(feature = "parser")]
UnterminatedJsxCloseTag,
#[cfg(feature = "parser")]
UnterminatedJsxExpression,
#[cfg(feature = "parser")]
UnterminatedMdComment,
#[cfg(feature = "parser")]
UnterminatedFrontmatter,
#[cfg(feature = "parser")]
MismatchedJsxCloseTag,
#[cfg(feature = "parser")]
TableShapeMismatch,
#[cfg(feature = "parser")]
StraySetextUnderline,
#[cfg(feature = "parser")]
MissingJsxAttributeValue,
#[cfg(feature = "parser")]
ListMarkerOverflow,
#[cfg(feature = "parser")]
EmptyFrontmatter,
#[cfg(feature = "parser")]
InvalidFrontmatterYaml,
#[cfg(feature = "parser")]
HeadingLevelClamped,
#[cfg(feature = "parser")]
RecoveredUnterminatedJsx,
#[cfg(feature = "transform")]
ImportFileNotFound,
#[cfg(feature = "transform")]
InvalidLineRange,
#[cfg(feature = "transform")]
RegistryIndexUnreadable,
#[cfg(feature = "transform")]
RegistryIndexMalformed,
#[cfg(feature = "transform")]
RegistryEntryNotFound,
#[cfg(feature = "transform")]
RegistrySourceUnreadable,
#[cfg(feature = "transform")]
ComponentSourceUnreadable,
#[cfg(feature = "transform")]
AssetCopyFailed,
#[cfg(feature = "transform")]
MermaidRenderFailed,
#[cfg(feature = "transform")]
MmdcUnavailable,
#[cfg(feature = "transform")]
MissingComponentAttr,
#[cfg(feature = "transform")]
AssetSourceMissing,
#[cfg(feature = "transform")]
BaseDirNotFound,
#[cfg(feature = "codegen")]
MalformedJsxTagName,
#[cfg(feature = "codegen")]
MdxTableUnsupported,
#[cfg(feature = "codegen")]
HtmlExpressionDropped,
Custom { code: String, severity: Severity },
}
impl DiagnosticCode for Code {
fn code(&self) -> &str {
match self {
#[cfg(feature = "lexer")]
Self::InvalidCharacter => "E001",
#[cfg(feature = "lexer")]
Self::InvalidFrontMatter => "E002",
#[cfg(feature = "lexer")]
Self::UnterminatedString => "E003",
#[cfg(feature = "lexer")]
Self::UnterminatedExpression => "E004",
#[cfg(feature = "lexer")]
Self::UnexpectedEof => "E005",
#[cfg(feature = "lexer")]
Self::InvalidJsxSelfClosingTag => "E006",
#[cfg(feature = "lexer")]
Self::UnterminatedJsxTag => "E007",
#[cfg(feature = "lexer")]
Self::InvalidJsxClosingTag => "E008",
#[cfg(feature = "lexer")]
Self::InvalidJsxAttribute => "E009",
#[cfg(feature = "lexer")]
Self::UnterminatedCodeBlock => "E010",
#[cfg(feature = "lexer")]
Self::EmptyFrontMatter => "W001",
#[cfg(feature = "parser")]
Self::UnterminatedLink => "P001",
#[cfg(feature = "parser")]
Self::UnterminatedImage => "P002",
#[cfg(feature = "parser")]
Self::UnterminatedInlineCode => "P003",
#[cfg(feature = "parser")]
Self::UnterminatedCodeBlockBlock => "P004",
#[cfg(feature = "parser")]
Self::UnterminatedJsxOpenTag => "P005",
#[cfg(feature = "parser")]
Self::UnterminatedJsxCloseTag => "P006",
#[cfg(feature = "parser")]
Self::UnterminatedJsxExpression => "P007",
#[cfg(feature = "parser")]
Self::UnterminatedMdComment => "P008",
#[cfg(feature = "parser")]
Self::UnterminatedFrontmatter => "P009",
#[cfg(feature = "parser")]
Self::MismatchedJsxCloseTag => "P010",
#[cfg(feature = "parser")]
Self::TableShapeMismatch => "P011",
#[cfg(feature = "parser")]
Self::StraySetextUnderline => "P012",
#[cfg(feature = "parser")]
Self::MissingJsxAttributeValue => "P013",
#[cfg(feature = "parser")]
Self::ListMarkerOverflow => "P014",
#[cfg(feature = "parser")]
Self::EmptyFrontmatter => "PW001",
#[cfg(feature = "parser")]
Self::InvalidFrontmatterYaml => "PW002",
#[cfg(feature = "parser")]
Self::HeadingLevelClamped => "PW003",
#[cfg(feature = "parser")]
Self::RecoveredUnterminatedJsx => "PW004",
#[cfg(feature = "transform")]
Self::ImportFileNotFound => "T001",
#[cfg(feature = "transform")]
Self::InvalidLineRange => "T002",
#[cfg(feature = "transform")]
Self::RegistryIndexUnreadable => "T003",
#[cfg(feature = "transform")]
Self::RegistryIndexMalformed => "T004",
#[cfg(feature = "transform")]
Self::RegistryEntryNotFound => "T005",
#[cfg(feature = "transform")]
Self::RegistrySourceUnreadable => "T006",
#[cfg(feature = "transform")]
Self::ComponentSourceUnreadable => "T007",
#[cfg(feature = "transform")]
Self::AssetCopyFailed => "T008",
#[cfg(feature = "transform")]
Self::MermaidRenderFailed => "T009",
#[cfg(feature = "transform")]
Self::MmdcUnavailable => "TW001",
#[cfg(feature = "transform")]
Self::MissingComponentAttr => "TW002",
#[cfg(feature = "transform")]
Self::AssetSourceMissing => "TW003",
#[cfg(feature = "transform")]
Self::BaseDirNotFound => "TW004",
#[cfg(feature = "codegen")]
Self::MalformedJsxTagName => "G001",
#[cfg(feature = "codegen")]
Self::MdxTableUnsupported => "GW001",
#[cfg(feature = "codegen")]
Self::HtmlExpressionDropped => "GW002",
Self::Custom { code, .. } => code.as_str(),
}
}
fn severity(&self) -> Severity {
match self {
#[cfg(feature = "lexer")]
Self::InvalidCharacter
| Self::InvalidFrontMatter
| Self::UnterminatedString
| Self::UnterminatedExpression
| Self::UnexpectedEof
| Self::InvalidJsxSelfClosingTag
| Self::UnterminatedJsxTag
| Self::InvalidJsxClosingTag
| Self::InvalidJsxAttribute
| Self::UnterminatedCodeBlock => Severity::Error,
#[cfg(feature = "lexer")]
Self::EmptyFrontMatter => Severity::Warning,
#[cfg(feature = "parser")]
Self::UnterminatedLink
| Self::UnterminatedImage
| Self::UnterminatedInlineCode
| Self::UnterminatedCodeBlockBlock
| Self::UnterminatedJsxOpenTag
| Self::UnterminatedJsxCloseTag
| Self::UnterminatedJsxExpression
| Self::UnterminatedMdComment
| Self::UnterminatedFrontmatter
| Self::MismatchedJsxCloseTag
| Self::TableShapeMismatch
| Self::StraySetextUnderline
| Self::MissingJsxAttributeValue
| Self::ListMarkerOverflow => Severity::Error,
#[cfg(feature = "parser")]
Self::EmptyFrontmatter
| Self::InvalidFrontmatterYaml
| Self::HeadingLevelClamped
| Self::RecoveredUnterminatedJsx => Severity::Warning,
#[cfg(feature = "transform")]
Self::ImportFileNotFound
| Self::InvalidLineRange
| Self::RegistryIndexUnreadable
| Self::RegistryIndexMalformed
| Self::RegistryEntryNotFound
| Self::RegistrySourceUnreadable
| Self::ComponentSourceUnreadable
| Self::AssetCopyFailed
| Self::MermaidRenderFailed => Severity::Error,
#[cfg(feature = "transform")]
Self::MmdcUnavailable | Self::MissingComponentAttr | Self::AssetSourceMissing | Self::BaseDirNotFound => {
Severity::Warning
},
#[cfg(feature = "codegen")]
Self::MalformedJsxTagName => Severity::Error,
#[cfg(feature = "codegen")]
Self::MdxTableUnsupported | Self::HtmlExpressionDropped => Severity::Warning,
Self::Custom { severity, .. } => *severity,
}
}
}