use hir::HirDisplay; use crate::{Diagnostic, DiagnosticCode, DiagnosticsContext}; // Diagnostic: expected-array-or-slice-pat // // This diagnostic is triggered when an array or slice pattern is matched // against a type that is neither an array nor a slice. pub(crate) fn expected_array_or_slice_pat( ctx: &DiagnosticsContext<'_, '_>, d: &hir::ExpectedArrayOrSlicePat<'_>, ) -> Diagnostic { Diagnostic::new_with_syntax_node_ptr( ctx, DiagnosticCode::RustcHardError("E0529"), format!( "expected an array or slice, found {}", d.found.display(ctx.sema.db, ctx.display_target) ), d.pat.map(Into::into), ) .stable() } #[cfg(test)] mod tests { use crate::tests::check_diagnostics; #[test] fn expected_array_or_slice() { check_diagnostics( r#" fn f([_a, _b]: i32) {} //^^^^^^^^ error: expected an array or slice, found i32 "#, ); } #[test] fn expected_array_or_slice_let_pattern() { check_diagnostics( r#" fn f(x: i32) { let [_a, _b] = x; //^^^^^^^^ error: expected an array or slice, found i32 } "#, ); } }