Improve rustc_on_unimplemented ui test
This commit is contained in:
parent
49e5e4e3a5
commit
d2d844c65d
2 changed files with 86 additions and 53 deletions
|
|
@ -1,64 +1,73 @@
|
|||
// ignore-tidy-linelength
|
||||
|
||||
#![crate_type = "lib"]
|
||||
#![feature(rustc_attrs)]
|
||||
|
||||
#![allow(unused)]
|
||||
|
||||
#[rustc_on_unimplemented = "test error `{Self}` with `{Bar}` `{Baz}` `{Quux}`"]
|
||||
trait Foo<Bar, Baz, Quux>
|
||||
{}
|
||||
trait Foo<Bar, Baz, Quux> {}
|
||||
|
||||
#[rustc_on_unimplemented="a collection of type `{Self}` cannot be built from an iterator over elements of type `{A}`"]
|
||||
#[rustc_on_unimplemented = "a collection of type `{Self}` cannot \
|
||||
be built from an iterator over elements of type `{A}`"]
|
||||
trait MyFromIterator<A> {
|
||||
/// Builds a container with elements from an external iterator.
|
||||
fn my_from_iter<T: Iterator<Item=A>>(iterator: T) -> Self;
|
||||
fn my_from_iter<T: Iterator<Item = A>>(iterator: T) -> Self;
|
||||
}
|
||||
|
||||
#[rustc_on_unimplemented]
|
||||
//~^ ERROR malformed `rustc_on_unimplemented` attribute
|
||||
trait BadAnnotation1
|
||||
{}
|
||||
trait NoContent {}
|
||||
|
||||
#[rustc_on_unimplemented = "Unimplemented trait error on `{Self}` with params `<{A},{B},{C}>`"]
|
||||
//~^ ERROR cannot find parameter C on this trait
|
||||
trait BadAnnotation2<A,B>
|
||||
{}
|
||||
trait ParameterNotPresent<A, B> {}
|
||||
|
||||
#[rustc_on_unimplemented = "Unimplemented trait error on `{Self}` with params `<{A},{B},{}>`"]
|
||||
//~^ ERROR positional format arguments are not allowed here
|
||||
trait BadAnnotation3<A,B>
|
||||
{}
|
||||
trait NoPositionalArgs<A, B> {}
|
||||
|
||||
#[rustc_on_unimplemented(lorem="")]
|
||||
#[rustc_on_unimplemented(lorem = "")]
|
||||
//~^ ERROR this attribute must have a valid
|
||||
trait BadAnnotation4 {}
|
||||
trait EmptyMessage {}
|
||||
|
||||
#[rustc_on_unimplemented(lorem(ipsum(dolor)))]
|
||||
//~^ ERROR this attribute must have a valid
|
||||
trait BadAnnotation5 {}
|
||||
trait Invalid {}
|
||||
|
||||
#[rustc_on_unimplemented(message="x", message="y")]
|
||||
#[rustc_on_unimplemented(message = "x", message = "y")]
|
||||
//~^ ERROR this attribute must have a valid
|
||||
trait BadAnnotation6 {}
|
||||
trait DuplicateMessage {}
|
||||
|
||||
#[rustc_on_unimplemented(message="x", on(desugared, message="y"))]
|
||||
#[rustc_on_unimplemented(message = "x", on(desugared, message = "y"))]
|
||||
//~^ ERROR this attribute must have a valid
|
||||
trait BadAnnotation7 {}
|
||||
trait OnInWrongPosition {}
|
||||
|
||||
#[rustc_on_unimplemented(on(), message="y")]
|
||||
#[rustc_on_unimplemented(on(), message = "y")]
|
||||
//~^ ERROR empty `on`-clause
|
||||
trait BadAnnotation8 {}
|
||||
trait NoEmptyOn {}
|
||||
|
||||
#[rustc_on_unimplemented(on="x", message="y")]
|
||||
#[rustc_on_unimplemented(on = "x", message = "y")]
|
||||
//~^ ERROR this attribute must have a valid
|
||||
trait BadAnnotation9 {}
|
||||
trait ExpectedPredicateInOn {}
|
||||
|
||||
#[rustc_on_unimplemented(on(x="y"), message="y")]
|
||||
trait BadAnnotation10 {}
|
||||
#[rustc_on_unimplemented(on(x = "y"), message = "y")]
|
||||
trait OnWithoutDirectives {}
|
||||
|
||||
#[rustc_on_unimplemented(on(desugared, on(desugared, message="x")), message="y")]
|
||||
#[rustc_on_unimplemented(on(desugared, on(desugared, message = "x")), message = "y")]
|
||||
//~^ ERROR this attribute must have a valid
|
||||
trait BadAnnotation11 {}
|
||||
trait NoNestedOn {}
|
||||
|
||||
pub fn main() {
|
||||
}
|
||||
// caught by `OnUnimplementedDirective::parse`, *not* `eval_condition`
|
||||
#[rustc_on_unimplemented(on("y", message = "y"))]
|
||||
//~^ ERROR invalid `on`-clause
|
||||
trait UnsupportedLiteral {}
|
||||
|
||||
#[rustc_on_unimplemented(on(not(a, b), message = "y"))]
|
||||
//~^ ERROR expected 1 cfg-pattern
|
||||
trait ExpectedOnePattern {}
|
||||
|
||||
#[rustc_on_unimplemented(on(thing::What, message = "y"))]
|
||||
//~^ ERROR `cfg` predicate key must be an identifier
|
||||
trait KeyMustBeIdentifier {}
|
||||
|
||||
#[rustc_on_unimplemented(on(thing::What = "value", message = "y"))]
|
||||
//~^ ERROR `cfg` predicate key must be an identifier
|
||||
trait KeyMustBeIdentifier2 {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
error: malformed `rustc_on_unimplemented` attribute input
|
||||
--> $DIR/bad-annotation.rs:17:1
|
||||
--> $DIR/bad-annotation.rs:15:1
|
||||
|
|
||||
LL | #[rustc_on_unimplemented]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
@ -12,27 +12,27 @@ LL | #[rustc_on_unimplemented(/*opt*/ message = "...", /*opt*/ label = "...", /*
|
|||
| ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
error[E0230]: cannot find parameter C on this trait
|
||||
--> $DIR/bad-annotation.rs:22:90
|
||||
--> $DIR/bad-annotation.rs:19:90
|
||||
|
|
||||
LL | #[rustc_on_unimplemented = "Unimplemented trait error on `{Self}` with params `<{A},{B},{C}>`"]
|
||||
| ^
|
||||
|
||||
error[E0231]: positional format arguments are not allowed here
|
||||
--> $DIR/bad-annotation.rs:27:90
|
||||
--> $DIR/bad-annotation.rs:23:90
|
||||
|
|
||||
LL | #[rustc_on_unimplemented = "Unimplemented trait error on `{Self}` with params `<{A},{B},{}>`"]
|
||||
| ^
|
||||
|
||||
error[E0232]: this attribute must have a valid value
|
||||
--> $DIR/bad-annotation.rs:32:26
|
||||
--> $DIR/bad-annotation.rs:27:26
|
||||
|
|
||||
LL | #[rustc_on_unimplemented(lorem="")]
|
||||
| ^^^^^^^^ expected value here
|
||||
LL | #[rustc_on_unimplemented(lorem = "")]
|
||||
| ^^^^^^^^^^ expected value here
|
||||
|
|
||||
= note: eg `#[rustc_on_unimplemented(message="foo")]`
|
||||
|
||||
error[E0232]: this attribute must have a valid value
|
||||
--> $DIR/bad-annotation.rs:36:26
|
||||
--> $DIR/bad-annotation.rs:31:26
|
||||
|
|
||||
LL | #[rustc_on_unimplemented(lorem(ipsum(dolor)))]
|
||||
| ^^^^^^^^^^^^^^^^^^^ expected value here
|
||||
|
|
@ -40,44 +40,68 @@ LL | #[rustc_on_unimplemented(lorem(ipsum(dolor)))]
|
|||
= note: eg `#[rustc_on_unimplemented(message="foo")]`
|
||||
|
||||
error[E0232]: this attribute must have a valid value
|
||||
--> $DIR/bad-annotation.rs:40:39
|
||||
--> $DIR/bad-annotation.rs:35:41
|
||||
|
|
||||
LL | #[rustc_on_unimplemented(message="x", message="y")]
|
||||
| ^^^^^^^^^^^ expected value here
|
||||
LL | #[rustc_on_unimplemented(message = "x", message = "y")]
|
||||
| ^^^^^^^^^^^^^ expected value here
|
||||
|
|
||||
= note: eg `#[rustc_on_unimplemented(message="foo")]`
|
||||
|
||||
error[E0232]: this attribute must have a valid value
|
||||
--> $DIR/bad-annotation.rs:44:39
|
||||
--> $DIR/bad-annotation.rs:39:41
|
||||
|
|
||||
LL | #[rustc_on_unimplemented(message="x", on(desugared, message="y"))]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ expected value here
|
||||
LL | #[rustc_on_unimplemented(message = "x", on(desugared, message = "y"))]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected value here
|
||||
|
|
||||
= note: eg `#[rustc_on_unimplemented(message="foo")]`
|
||||
|
||||
error[E0232]: empty `on`-clause in `#[rustc_on_unimplemented]`
|
||||
--> $DIR/bad-annotation.rs:48:26
|
||||
--> $DIR/bad-annotation.rs:43:26
|
||||
|
|
||||
LL | #[rustc_on_unimplemented(on(), message="y")]
|
||||
LL | #[rustc_on_unimplemented(on(), message = "y")]
|
||||
| ^^^^ empty on-clause here
|
||||
|
||||
error[E0232]: this attribute must have a valid value
|
||||
--> $DIR/bad-annotation.rs:52:26
|
||||
--> $DIR/bad-annotation.rs:47:26
|
||||
|
|
||||
LL | #[rustc_on_unimplemented(on="x", message="y")]
|
||||
| ^^^^^^ expected value here
|
||||
LL | #[rustc_on_unimplemented(on = "x", message = "y")]
|
||||
| ^^^^^^^^ expected value here
|
||||
|
|
||||
= note: eg `#[rustc_on_unimplemented(message="foo")]`
|
||||
|
||||
error[E0232]: this attribute must have a valid value
|
||||
--> $DIR/bad-annotation.rs:59:40
|
||||
--> $DIR/bad-annotation.rs:54:40
|
||||
|
|
||||
LL | #[rustc_on_unimplemented(on(desugared, on(desugared, message="x")), message="y")]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ expected value here
|
||||
LL | #[rustc_on_unimplemented(on(desugared, on(desugared, message = "x")), message = "y")]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected value here
|
||||
|
|
||||
= note: eg `#[rustc_on_unimplemented(message="foo")]`
|
||||
|
||||
error: aborting due to 10 previous errors
|
||||
error[E0232]: invalid `on`-clause in `#[rustc_on_unimplemented]`
|
||||
--> $DIR/bad-annotation.rs:59:26
|
||||
|
|
||||
LL | #[rustc_on_unimplemented(on("y", message = "y"))]
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^ invalid on-clause here
|
||||
|
||||
Some errors have detailed explanations: E0230, E0231, E0232.
|
||||
error[E0536]: expected 1 cfg-pattern
|
||||
--> $DIR/bad-annotation.rs:63:29
|
||||
|
|
||||
LL | #[rustc_on_unimplemented(on(not(a, b), message = "y"))]
|
||||
| ^^^^^^^^^
|
||||
|
||||
error: `cfg` predicate key must be an identifier
|
||||
--> $DIR/bad-annotation.rs:67:29
|
||||
|
|
||||
LL | #[rustc_on_unimplemented(on(thing::What, message = "y"))]
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: `cfg` predicate key must be an identifier
|
||||
--> $DIR/bad-annotation.rs:71:29
|
||||
|
|
||||
LL | #[rustc_on_unimplemented(on(thing::What = "value", message = "y"))]
|
||||
| ^^^^^^^^^^^
|
||||
|
||||
error: aborting due to 14 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0230, E0231, E0232, E0536.
|
||||
For more information about an error, try `rustc --explain E0230`.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue