Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-diagnostics/src/handlers/unresolved_assoc_item.rs')
-rw-r--r--crates/ide-diagnostics/src/handlers/unresolved_assoc_item.rs52
1 files changed, 52 insertions, 0 deletions
diff --git a/crates/ide-diagnostics/src/handlers/unresolved_assoc_item.rs b/crates/ide-diagnostics/src/handlers/unresolved_assoc_item.rs
new file mode 100644
index 0000000000..f1c95993c8
--- /dev/null
+++ b/crates/ide-diagnostics/src/handlers/unresolved_assoc_item.rs
@@ -0,0 +1,52 @@
+use crate::{Diagnostic, DiagnosticCode, DiagnosticsContext};
+
+// Diagnostic: unresolved-assoc-item
+//
+// This diagnostic is triggered if the referenced associated item does not exist.
+pub(crate) fn unresolved_assoc_item(
+ ctx: &DiagnosticsContext<'_>,
+ d: &hir::UnresolvedAssocItem,
+) -> Diagnostic {
+ Diagnostic::new_with_syntax_node_ptr(
+ ctx,
+ DiagnosticCode::RustcHardError("E0599"),
+ "no such associated item",
+ d.expr_or_pat.clone().map(Into::into),
+ )
+}
+
+#[cfg(test)]
+mod tests {
+ use crate::tests::check_diagnostics;
+
+ #[test]
+ fn bare() {
+ check_diagnostics(
+ r#"
+struct S;
+
+fn main() {
+ let _ = S::Assoc;
+ //^^^^^^^^ error: no such associated item
+}
+"#,
+ );
+ }
+
+ #[test]
+ fn unimplemented_trait() {
+ check_diagnostics(
+ r#"
+struct S;
+trait Foo {
+ const X: u32;
+}
+
+fn main() {
+ let _ = S::X;
+ //^^^^ error: no such associated item
+}
+"#,
+ );
+ }
+}