81 lines
2.2 KiB
Rust
81 lines
2.2 KiB
Rust
use rustc_errors::codes::*;
|
|
use rustc_hir::limit::Limit;
|
|
use rustc_macros::{Diagnostic, Subdiagnostic};
|
|
use rustc_span::{Span, Symbol};
|
|
|
|
#[derive(Diagnostic)]
|
|
#[help(
|
|
"consider increasing the recursion limit by adding a `#![recursion_limit = \"{$suggested_limit}\"]` attribute to your crate (`{$crate_name}`)"
|
|
)]
|
|
#[diag("queries overflow the depth limit!")]
|
|
pub(crate) struct QueryOverflow {
|
|
#[primary_span]
|
|
pub span: Span,
|
|
#[subdiagnostic]
|
|
pub note: QueryOverflowNote,
|
|
pub suggested_limit: Limit,
|
|
pub crate_name: Symbol,
|
|
}
|
|
|
|
#[derive(Subdiagnostic)]
|
|
#[note("query depth increased by {$depth} when {$desc}")]
|
|
pub(crate) struct QueryOverflowNote {
|
|
pub desc: String,
|
|
pub depth: usize,
|
|
}
|
|
|
|
#[derive(Subdiagnostic)]
|
|
#[note("...which requires {$desc}...")]
|
|
pub(crate) struct CycleStack {
|
|
#[primary_span]
|
|
pub span: Span,
|
|
pub desc: String,
|
|
}
|
|
|
|
#[derive(Subdiagnostic)]
|
|
pub(crate) enum StackCount {
|
|
#[note("...which immediately requires {$stack_bottom} again")]
|
|
Single,
|
|
#[note("...which again requires {$stack_bottom}, completing the cycle")]
|
|
Multiple,
|
|
}
|
|
|
|
#[derive(Subdiagnostic)]
|
|
pub(crate) enum Alias {
|
|
#[note("type aliases cannot be recursive")]
|
|
#[help("consider using a struct, enum, or union instead to break the cycle")]
|
|
#[help(
|
|
"see <https://doc.rust-lang.org/reference/types.html#recursive-types> for more information"
|
|
)]
|
|
Ty,
|
|
#[note("trait aliases cannot be recursive")]
|
|
Trait,
|
|
}
|
|
|
|
#[derive(Subdiagnostic)]
|
|
#[note("cycle used when {$usage}")]
|
|
pub(crate) struct CycleUsage {
|
|
#[primary_span]
|
|
pub span: Span,
|
|
pub usage: String,
|
|
}
|
|
|
|
#[derive(Diagnostic)]
|
|
#[diag("cycle detected when {$stack_bottom}", code = E0391)]
|
|
pub(crate) struct Cycle {
|
|
#[primary_span]
|
|
pub span: Span,
|
|
pub stack_bottom: String,
|
|
#[subdiagnostic]
|
|
pub cycle_stack: Vec<CycleStack>,
|
|
#[subdiagnostic]
|
|
pub stack_count: StackCount,
|
|
#[subdiagnostic]
|
|
pub alias: Option<Alias>,
|
|
#[subdiagnostic]
|
|
pub cycle_usage: Option<CycleUsage>,
|
|
#[note(
|
|
"see https://rustc-dev-guide.rust-lang.org/overview.html#queries and https://rustc-dev-guide.rust-lang.org/query.html for more information"
|
|
)]
|
|
pub note_span: (),
|
|
}
|