mirror of
https://github.com/typst/typst
synced 2025-05-24 05:55:28 +08:00
initial diagnostic identifiers
This commit is contained in:
parent
45366c0112
commit
05def04625
@ -115,12 +115,14 @@ macro_rules! __error {
|
||||
macro_rules! __warning {
|
||||
(
|
||||
$span:expr,
|
||||
$id:ident,
|
||||
$fmt:literal $(, $arg:expr)*
|
||||
$(; hint: $hint:literal $(, $hint_arg:expr)*)*
|
||||
$(,)?
|
||||
) => {
|
||||
$crate::diag::SourceDiagnostic::warning(
|
||||
$span,
|
||||
std::option::Option::Some($crate::diag::WarnIdentifier::$id),
|
||||
$crate::diag::eco_format!($fmt, $($arg),*),
|
||||
) $(.with_hint($crate::diag::eco_format!($hint, $($hint_arg),*)))*
|
||||
};
|
||||
@ -157,6 +159,8 @@ pub struct SourceDiagnostic {
|
||||
pub severity: Severity,
|
||||
/// The span of the relevant node in the source code.
|
||||
pub span: Span,
|
||||
/// The identifier for this diagnostic.
|
||||
pub identifier: Option<Identifier>,
|
||||
/// A diagnostic message describing the problem.
|
||||
pub message: EcoString,
|
||||
/// The trace of function calls leading to the problem.
|
||||
@ -181,6 +185,7 @@ impl SourceDiagnostic {
|
||||
Self {
|
||||
severity: Severity::Error,
|
||||
span,
|
||||
identifier: None,
|
||||
trace: eco_vec![],
|
||||
message: message.into(),
|
||||
hints: eco_vec![],
|
||||
@ -188,10 +193,15 @@ impl SourceDiagnostic {
|
||||
}
|
||||
|
||||
/// Create a new, bare warning.
|
||||
pub fn warning(span: Span, message: impl Into<EcoString>) -> Self {
|
||||
pub fn warning(
|
||||
span: Span,
|
||||
identifier: Option<WarnIdentifier>,
|
||||
message: impl Into<EcoString>,
|
||||
) -> Self {
|
||||
Self {
|
||||
severity: Severity::Warning,
|
||||
span,
|
||||
identifier: identifier.map(Identifier::Warn),
|
||||
trace: eco_vec![],
|
||||
message: message.into(),
|
||||
hints: eco_vec![],
|
||||
@ -220,6 +230,7 @@ impl From<SyntaxError> for SourceDiagnostic {
|
||||
fn from(error: SyntaxError) -> Self {
|
||||
Self {
|
||||
severity: Severity::Error,
|
||||
identifier: None,
|
||||
span: error.span,
|
||||
message: error.message,
|
||||
trace: eco_vec![],
|
||||
@ -228,6 +239,29 @@ impl From<SyntaxError> for SourceDiagnostic {
|
||||
}
|
||||
}
|
||||
|
||||
/// Any possible identifier for a diagnostic.
|
||||
#[derive(Debug, Clone, Eq, PartialEq, Hash)]
|
||||
pub enum Identifier {
|
||||
/// Identifier for a built-in compiler error.
|
||||
Error(ErrorIdentifier),
|
||||
/// Identifier for a built-in compiler warning.
|
||||
Warn(WarnIdentifier),
|
||||
/// Identifier for a warning raised by a package.
|
||||
User(EcoString),
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Eq, PartialEq, Hash)]
|
||||
pub enum ErrorIdentifier {}
|
||||
|
||||
#[derive(Debug, Clone, Eq, PartialEq, Hash)]
|
||||
pub enum WarnIdentifier {
|
||||
UnnecessaryImportRenaming,
|
||||
UnnecessaryStars,
|
||||
UnnecessaryUnderscores,
|
||||
NonConvergingLayout,
|
||||
UnknownFontFamilies,
|
||||
}
|
||||
|
||||
/// A part of a diagnostic's [trace](SourceDiagnostic::trace).
|
||||
#[derive(Debug, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
|
||||
pub enum Tracepoint {
|
||||
|
@ -37,6 +37,7 @@ impl Eval for ast::ModuleImport<'_> {
|
||||
// Warn on `import x as x`
|
||||
vm.engine.sink.warn(warning!(
|
||||
new_name.span(),
|
||||
UnnecessaryImportRenaming,
|
||||
"unnecessary import rename to same name",
|
||||
));
|
||||
}
|
||||
@ -112,6 +113,7 @@ impl Eval for ast::ModuleImport<'_> {
|
||||
{
|
||||
vm.engine.sink.warn(warning!(
|
||||
renamed_item.new_name().span(),
|
||||
UnnecessaryImportRenaming,
|
||||
"unnecessary import rename to same name",
|
||||
));
|
||||
}
|
||||
|
@ -136,7 +136,7 @@ impl Eval for ast::Strong<'_> {
|
||||
vm.engine
|
||||
.sink
|
||||
.warn(warning!(
|
||||
self.span(), "no text within stars";
|
||||
self.span(), UnnecessaryStars, "no text within stars";
|
||||
hint: "using multiple consecutive stars (e.g. **) has no additional effect",
|
||||
));
|
||||
}
|
||||
@ -154,7 +154,7 @@ impl Eval for ast::Emph<'_> {
|
||||
vm.engine
|
||||
.sink
|
||||
.warn(warning!(
|
||||
self.span(), "no text within underscores";
|
||||
self.span(), UnnecessaryUnderscores, "no text within underscores";
|
||||
hint: "using multiple consecutive underscores (e.g. __) has no additional effect"
|
||||
));
|
||||
}
|
||||
|
@ -152,7 +152,7 @@ fn compile_inner(
|
||||
|
||||
if iter >= 5 {
|
||||
sink.warn(warning!(
|
||||
Span::detached(), "layout did not converge within 5 attempts";
|
||||
Span::detached(), NonConvergingLayout, "layout did not converge within 5 attempts";
|
||||
hint: "check if any states or queries are updating themselves"
|
||||
));
|
||||
break;
|
||||
|
@ -134,6 +134,7 @@ pub struct TextElem {
|
||||
if !book.contains_family(family.as_str()) {
|
||||
engine.sink.warn(warning!(
|
||||
font_list.span,
|
||||
UnknownFontFamilies,
|
||||
"unknown font family: {}",
|
||||
family.as_str(),
|
||||
));
|
||||
|
Loading…
x
Reference in New Issue
Block a user