Review changes

This commit is contained in:
Jack Huey 2022-02-14 13:00:10 -05:00
parent c920eb88b2
commit 2b151fd5c8
8 changed files with 130 additions and 50 deletions

View File

@ -2666,6 +2666,18 @@ pub struct Trait {
/// a `where` keyword (`bool`). This is split out from `WhereClause`, since there /// a `where` keyword (`bool`). This is split out from `WhereClause`, since there
/// are two locations for where clause on type aliases, but their predicates /// are two locations for where clause on type aliases, but their predicates
/// are concatenated together. /// are concatenated together.
///
/// Take this example:
/// ```rust, ignore
/// trait Foo {
/// type Assoc<'a, 'b> where Self: 'a, Self: 'b;
/// }
/// impl Foo for () {
/// type Assoc<'a, 'b> where Self: 'a = () where Self: 'b;
/// // ^^^^^^^^^^^^^^ first where clause
/// // ^^^^^^^^^^^^^^ second where clause
/// }
/// ```
#[derive(Copy, Clone, Encodable, Decodable, Debug, Default)] #[derive(Copy, Clone, Encodable, Decodable, Debug, Default)]
pub struct TyAliasWhereClause(pub bool, pub Span); pub struct TyAliasWhereClause(pub bool, pub Span);

View File

@ -1275,10 +1275,14 @@ impl<'a> Visitor<'a> for AstValidator<'a> {
} }
self.check_type_no_bounds(bounds, "this context"); self.check_type_no_bounds(bounds, "this context");
if where_clauses.1.0 { if where_clauses.1.0 {
self.err_handler().span_err( let mut err = self.err_handler().struct_span_err(
where_clauses.1.1, where_clauses.1.1,
"where clauses are not allowed after the type for type aliases", "where clauses are not allowed after the type for type aliases",
) );
err.note(
"see issue #89122 <https://github.com/rust-lang/rust/issues/89122> for more information",
);
err.emit();
} }
} }
_ => {} _ => {}

View File

@ -819,12 +819,14 @@ pub trait LintContext: Sized {
} }
}, },
BuiltinLintDiagnostics::DeprecatedWhereclauseLocation(new_span, suggestion) => { BuiltinLintDiagnostics::DeprecatedWhereclauseLocation(new_span, suggestion) => {
db.span_suggestion( db.multipart_suggestion(
new_span, "move it to the end of the type declaration",
"move it here", vec![(db.span.primary_span().unwrap(), "".to_string()), (new_span, suggestion)],
suggestion,
Applicability::MachineApplicable, Applicability::MachineApplicable,
); );
db.note(
"see issue #89122 <https://github.com/rust-lang/rust/issues/89122> for more information",
);
}, },
} }
// Rewrap `db`, and pass control to the user. // Rewrap `db`, and pass control to the user.

View File

@ -0,0 +1,30 @@
// check-pass
// run-rustfix
#![feature(generic_associated_types)]
trait Trait {
// Fine.
type Assoc where u32: Copy;
// Fine.
type Assoc2 where u32: Copy, i32: Copy;
}
impl Trait for u32 {
// Not fine, suggests moving.
type Assoc = () where u32: Copy;
//~^ WARNING where clause not allowed here
// Not fine, suggests moving `u32: Copy`
type Assoc2 = () where i32: Copy, u32: Copy;
//~^ WARNING where clause not allowed here
}
impl Trait for i32 {
// Fine.
type Assoc = () where u32: Copy;
// Not fine, suggests moving both.
type Assoc2 = () where u32: Copy, i32: Copy;
//~^ WARNING where clause not allowed here
}
fn main() {}

View File

@ -0,0 +1,30 @@
// check-pass
// run-rustfix
#![feature(generic_associated_types)]
trait Trait {
// Fine.
type Assoc where u32: Copy;
// Fine.
type Assoc2 where u32: Copy, i32: Copy;
}
impl Trait for u32 {
// Not fine, suggests moving.
type Assoc where u32: Copy = ();
//~^ WARNING where clause not allowed here
// Not fine, suggests moving `u32: Copy`
type Assoc2 where u32: Copy = () where i32: Copy;
//~^ WARNING where clause not allowed here
}
impl Trait for i32 {
// Fine.
type Assoc = () where u32: Copy;
// Not fine, suggests moving both.
type Assoc2 where u32: Copy, i32: Copy = ();
//~^ WARNING where clause not allowed here
}
fn main() {}

View File

@ -0,0 +1,42 @@
warning: where clause not allowed here
--> $DIR/type-alias-where-fixable.rs:15:16
|
LL | type Assoc where u32: Copy = ();
| ^^^^^^^^^^^^^^^
|
= note: `#[warn(deprecated_where_clause_location)]` on by default
= note: see issue #89122 <https://github.com/rust-lang/rust/issues/89122> for more information
help: move it to the end of the type declaration
|
LL - type Assoc where u32: Copy = ();
LL + type Assoc = () where u32: Copy;
|
warning: where clause not allowed here
--> $DIR/type-alias-where-fixable.rs:18:17
|
LL | type Assoc2 where u32: Copy = () where i32: Copy;
| ^^^^^^^^^^^^^^^
|
= note: see issue #89122 <https://github.com/rust-lang/rust/issues/89122> for more information
help: move it to the end of the type declaration
|
LL - type Assoc2 where u32: Copy = () where i32: Copy;
LL + type Assoc2 = () where i32: Copy, u32: Copy;
|
warning: where clause not allowed here
--> $DIR/type-alias-where-fixable.rs:26:17
|
LL | type Assoc2 where u32: Copy, i32: Copy = ();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #89122 <https://github.com/rust-lang/rust/issues/89122> for more information
help: move it to the end of the type declaration
|
LL - type Assoc2 where u32: Copy, i32: Copy = ();
LL + type Assoc2 = () where u32: Copy, i32: Copy;
|
warning: 3 warnings emitted

View File

@ -10,28 +10,4 @@ type Bar = () where u32: Copy;
type Baz = () where; type Baz = () where;
//~^ ERROR where clauses are not allowed //~^ ERROR where clauses are not allowed
trait Trait {
// Fine.
type Assoc where u32: Copy;
// Fine.
type Assoc2 where u32: Copy, i32: Copy;
}
impl Trait for u32 {
// Not fine, suggests moving.
type Assoc where u32: Copy = ();
//~^ WARNING where clause not allowed here
// Not fine, suggests moving `u32: Copy`
type Assoc2 where u32: Copy = () where i32: Copy;
//~^ WARNING where clause not allowed here
}
impl Trait for i32 {
// Fine.
type Assoc = () where u32: Copy;
// Not fine, suggests moving both.
type Assoc2 where u32: Copy, i32: Copy = ();
//~^ WARNING where clause not allowed here
}
fn main() {} fn main() {}

View File

@ -3,32 +3,16 @@ error: where clauses are not allowed after the type for type aliases
| |
LL | type Bar = () where u32: Copy; LL | type Bar = () where u32: Copy;
| ^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^
|
= note: see issue #89122 <https://github.com/rust-lang/rust/issues/89122> for more information
error: where clauses are not allowed after the type for type aliases error: where clauses are not allowed after the type for type aliases
--> $DIR/type-alias-where.rs:10:15 --> $DIR/type-alias-where.rs:10:15
| |
LL | type Baz = () where; LL | type Baz = () where;
| ^^^^^ | ^^^^^
warning: where clause not allowed here
--> $DIR/type-alias-where.rs:22:16
| |
LL | type Assoc where u32: Copy = (); = note: see issue #89122 <https://github.com/rust-lang/rust/issues/89122> for more information
| ^^^^^^^^^^^^^^^ - help: move it here: `where u32: Copy`
|
= note: `#[warn(deprecated_where_clause_location)]` on by default
warning: where clause not allowed here error: aborting due to 2 previous errors
--> $DIR/type-alias-where.rs:25:17
|
LL | type Assoc2 where u32: Copy = () where i32: Copy;
| ^^^^^^^^^^^^^^^ - help: move it here: `, u32: Copy`
warning: where clause not allowed here
--> $DIR/type-alias-where.rs:33:17
|
LL | type Assoc2 where u32: Copy, i32: Copy = ();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ - help: move it here: `where u32: Copy, i32: Copy`
error: aborting due to 2 previous errors; 3 warnings emitted