From 30556d592e5f2702fd578d289bed7a7a4facbf98 Mon Sep 17 00:00:00 2001 From: memoryruins Date: Mon, 17 Sep 2018 09:09:45 -0400 Subject: [PATCH] Suggest array indexing when tuple indexing on an array. --- src/librustc_typeck/check/mod.rs | 6 ++++++ src/test/ui/issues/issue-53712.rs | 9 +++++++++ src/test/ui/issues/issue-53712.stderr | 9 +++++++++ 3 files changed, 24 insertions(+) create mode 100644 src/test/ui/issues/issue-53712.rs create mode 100644 src/test/ui/issues/issue-53712.stderr diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs index aa27fe528e1fd..89ab085b03481 100644 --- a/src/librustc_typeck/check/mod.rs +++ b/src/librustc_typeck/check/mod.rs @@ -3344,6 +3344,12 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> { } }; } + ty::Array(ty, _) if ty.is_numeric() => { + let base = self.tcx.hir.node_to_pretty_string(base.id); + let msg = format!("attempting to use tuple indexing on an array; try"); + let suggestion = format!("{}[{}]", base, field); + err.span_suggestion(field.span, &msg, suggestion); + }, ty::RawPtr(..) => { let base = self.tcx.hir.node_to_pretty_string(base.id); let msg = format!("`{}` is a native pointer; try dereferencing it", base); diff --git a/src/test/ui/issues/issue-53712.rs b/src/test/ui/issues/issue-53712.rs new file mode 100644 index 0000000000000..c8b54c2d4beb4 --- /dev/null +++ b/src/test/ui/issues/issue-53712.rs @@ -0,0 +1,9 @@ +// issue #53712: make the error generated by using tuple indexing on an array more specific + +fn main() { + let arr = [10, 20, 30, 40, 50]; + arr.0; + //~^ ERROR no field `0` on type `[{integer}; 5]` [E0609] + //~| HELP attempting to use tuple indexing on an array; try + //~| SUGGESTION arr[0] +} diff --git a/src/test/ui/issues/issue-53712.stderr b/src/test/ui/issues/issue-53712.stderr new file mode 100644 index 0000000000000..ef885a438c827 --- /dev/null +++ b/src/test/ui/issues/issue-53712.stderr @@ -0,0 +1,9 @@ +error[E0609]: no field `0` on type `[{integer}; 5]` + --> $DIR/issue-53712.rs:5:9 + | +LL | arr.0; + | ^ help: attempting to use tuple indexing on an array; try: `arr[0]` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0609`.