Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir/src/diagnostics.rs')
-rw-r--r--crates/hir/src/diagnostics.rs44
1 files changed, 44 insertions, 0 deletions
diff --git a/crates/hir/src/diagnostics.rs b/crates/hir/src/diagnostics.rs
index d8bcaa0e74..b6e3002ed5 100644
--- a/crates/hir/src/diagnostics.rs
+++ b/crates/hir/src/diagnostics.rs
@@ -118,6 +118,8 @@ diagnostics![
BadRtn,
IncorrectGenericsLen,
IncorrectGenericsOrder,
+ MissingLifetime,
+ ElidedLifetimesInPath,
];
#[derive(Debug)]
@@ -440,6 +442,23 @@ pub struct IncorrectGenericsLen {
pub def: GenericDef,
}
+#[derive(Debug)]
+pub struct MissingLifetime {
+ /// Points at the name if there are no generics.
+ pub generics_or_segment: InFile<AstPtr<Either<ast::GenericArgList, ast::NameRef>>>,
+ pub expected: u32,
+ pub def: GenericDef,
+}
+
+#[derive(Debug)]
+pub struct ElidedLifetimesInPath {
+ /// Points at the name if there are no generics.
+ pub generics_or_segment: InFile<AstPtr<Either<ast::GenericArgList, ast::NameRef>>>,
+ pub expected: u32,
+ pub def: GenericDef,
+ pub hard_error: bool,
+}
+
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum GenericArgKind {
Lifetime,
@@ -861,6 +880,31 @@ impl AnyDiagnostic {
let expected_kind = GenericArgKind::from_id(param_id);
IncorrectGenericsOrder { provided_arg, expected_kind }.into()
}
+ PathLoweringDiagnostic::MissingLifetime { generics_source, expected_count, def }
+ | PathLoweringDiagnostic::ElisionFailure { generics_source, expected_count, def } => {
+ let generics_or_segment =
+ path_generics_source_to_ast(&path.value, generics_source)?;
+ let generics_or_segment = path.with_value(AstPtr::new(&generics_or_segment));
+ MissingLifetime { generics_or_segment, expected: expected_count, def: def.into() }
+ .into()
+ }
+ PathLoweringDiagnostic::ElidedLifetimesInPath {
+ generics_source,
+ expected_count,
+ def,
+ hard_error,
+ } => {
+ let generics_or_segment =
+ path_generics_source_to_ast(&path.value, generics_source)?;
+ let generics_or_segment = path.with_value(AstPtr::new(&generics_or_segment));
+ ElidedLifetimesInPath {
+ generics_or_segment,
+ expected: expected_count,
+ def: def.into(),
+ hard_error,
+ }
+ .into()
+ }
})
}