Add E0608

This commit is contained in:
Guillaume Gomez 2017-06-09 19:05:14 +02:00
parent 5aa34038ff
commit f8d3658147
9 changed files with 47 additions and 17 deletions

View File

@ -3889,13 +3889,9 @@ fn check_expr_kind(&self,
element_ty
}
None => {
let mut err = self.type_error_struct(
expr.span,
|actual| {
format!("cannot index a value of type `{}`",
actual)
},
base_t);
let mut err = struct_span_err!(tcx.sess, expr.span, E0608,
"cannot index into a value of type `{}`",
base_t);
// Try to give some advice about indexing tuples.
if let ty::TyTuple(..) = base_t.sty {
let mut needs_note = true;

View File

@ -4095,6 +4095,27 @@ fn not(self) -> bool {
```
"##,
E0608: r##"
An attempt to index into a type which doesn't implement the `std::ops::Index`
trait was performed.
Erroneous code example:
```compile_fail,E0608
0u8[2]; // error: cannot index into a value of type `u8`
```
To be able to index a value from a type, it needs to implement the
`std::ops::Index` trait. Example:
```
let v: Vec<u8> = vec![0, 1, 2, 3];
// The `Vec` type implements the `Index` trait so you can do:
println!("{}", v[2]);
```
"##,
E0609: r##"
Attempted to access a non-existent field in a struct.

View File

@ -0,0 +1,13 @@
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
fn main() {
0u8[2]; //~ ERROR E0608
}

View File

@ -9,5 +9,5 @@
// except according to those terms.
fn main() {
(return)[0]; //~ ERROR cannot index a value of type `!`
(return)[0]; //~ ERROR cannot index into a value of type `!`
}

View File

@ -10,5 +10,5 @@
fn main() {
let z = ();
let _ = z[0]; //~ ERROR cannot index a value of type `()`
let _ = z[0]; //~ ERROR cannot index into a value of type `()`
}

View File

@ -12,13 +12,13 @@ fn main() {
let tup = (0, 1, 2);
// the case where we show a suggestion
let _ = tup[0];
//~^ ERROR cannot index a value of type
//~^ ERROR cannot index into a value of type
//~| HELP to access tuple elements, use
//~| SUGGESTION let _ = tup.0
// the case where we show just a general hint
let i = 0_usize;
let _ = tup[i];
//~^ ERROR cannot index a value of type
//~^ ERROR cannot index into a value of type
//~| HELP to access tuple elements, use tuple indexing syntax (e.g. `tuple.0`)
}

View File

@ -12,5 +12,5 @@ fn f(_: &[f32]) {}
fn main() {
()[f(&[1.0])];
//~^ ERROR cannot index a value of type `()`
//~^ ERROR cannot index into a value of type `()`
}

View File

@ -14,8 +14,8 @@
fn main() {
let x = Foo;
&x[..]; //~ ERROR cannot index a value of type `Foo`
&x[Foo..]; //~ ERROR cannot index a value of type `Foo`
&x[..Foo]; //~ ERROR cannot index a value of type `Foo`
&x[Foo..Foo]; //~ ERROR cannot index a value of type `Foo`
&x[..]; //~ ERROR cannot index into a value of type `Foo`
&x[Foo..]; //~ ERROR cannot index into a value of type `Foo`
&x[..Foo]; //~ ERROR cannot index into a value of type `Foo`
&x[Foo..Foo]; //~ ERROR cannot index into a value of type `Foo`
}

View File

@ -1,4 +1,4 @@
error: cannot index a value of type `({integer},)`
error[E0608]: cannot index into a value of type `({integer},)`
--> $DIR/suggestion-non-ascii.rs:14:21
|
14 | println!("☃{}", tup[0]);