use crate::{Diagnostic, DiagnosticCode, DiagnosticsContext}; // Diagnostic: unresolved-ident // // This diagnostic is triggered if an expr-position ident is invalid. pub(crate) fn unresolved_ident( ctx: &DiagnosticsContext<'_>, d: &hir::UnresolvedIdent, ) -> Diagnostic { let mut range = ctx.sema.diagnostics_display_range(d.node.map(|(node, _)| node.syntax_node_ptr())); if let Some(in_node_range) = d.node.value.1 { range.range = in_node_range + range.range.start(); } Diagnostic::new(DiagnosticCode::RustcHardError("E0425"), "no such value in this scope", range) } #[cfg(test)] mod tests { use crate::tests::check_diagnostics; #[test] fn feature() { check_diagnostics( r#" //- minicore: fmt fn main() { format_args!("{unresolved}"); // ^^^^^^^^^^ error: no such value in this scope } "#, ) } #[test] fn missing() { check_diagnostics( r#" fn main() { let _ = x; //^ error: no such value in this scope } "#, ); } #[test] fn present() { check_diagnostics( r#" fn main() { let x = 5; let _ = x; } "#, ); } #[test] fn unresolved_self_val() { check_diagnostics( r#" fn main() { self.a; //^^^^ error: no such value in this scope let self: self = self; //^^^^ error: no such value in this scope } "#, ); } }