Add E0608
This commit is contained in:
parent
5aa34038ff
commit
f8d3658147
@ -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;
|
||||
|
@ -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.
|
||||
|
||||
|
13
src/test/compile-fail/E0608.rs
Normal file
13
src/test/compile-fail/E0608.rs
Normal 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
|
||||
}
|
@ -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 `!`
|
||||
}
|
||||
|
@ -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 `()`
|
||||
}
|
||||
|
@ -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`)
|
||||
}
|
||||
|
@ -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 `()`
|
||||
}
|
||||
|
@ -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`
|
||||
}
|
||||
|
@ -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]);
|
||||
|
Loading…
Reference in New Issue
Block a user