Detect empty leading where clauses on type aliases#121326
Detect empty leading where clauses on type aliases#121326bors merged 2 commits intorust-lang:masterfrom
Conversation
|
rustbot has assigned @compiler-errors. Use r? to explicitly pick a reviewer |
|
Some changes occurred in src/tools/rustfmt cc @rust-lang/rustfmt |
| #[suggestion_part(code = "{snippet}")] | ||
| pub right: Span, | ||
|
|
||
| pub enum WhereClauseBeforeTypeAliasSugg { |
There was a problem hiding this comment.
The split into Remove & Move was not only done to provide a more accurate diagnostic message for the edge case “two where clauses, a leading and a trailing one, where the leading one is empty” but also to prevent the debug assertion empty span and no suggestions from firing.
| db.note( | ||
| "see issue #89122 <https://github.com/rust-lang/rust/issues/89122> for more information", | ||
| ); | ||
| BuiltinLintDiagnostics::DeprecatedWhereclauseLocation(sugg) => { |
There was a problem hiding this comment.
It's sad that I couldn't consolidate the messages of the lint and the error but the bridging between rustc_ast_passes & rustc_lint is too tricky. If rustc_lint_defs (the go-between) had a messages.ftl I could make both crates import the fluent_generated messages but that's currently not the case.
adf7ddc to
dbd70e5
Compare
compiler-errors
left a comment
There was a problem hiding this comment.
thank you for a thoughtful and well commented pr as always
|
sorry for taking so long to review xd @bors r+ |
…clauses-on-ty-aliases, r=compiler-errors
Detect empty leading where clauses on type aliases
1. commit: refactor the AST of type alias where clauses
* I could no longer bear the look of `.0.1` and `.1.0`
* Arguably moving `split` out of `TyAlias` into a substruct might not make that much sense from a semantic standpoint since it reprs an index into `TyAlias.predicates` but it's alright and it cleans up the usage sites of `TyAlias`
2. commit: fix an oversight: An empty leading where clause is still a leading where clause
* semantically reject empty leading where clauses on lazy type aliases
* e.g., on `#![feature(lazy_type_alias)] type X where = ();`
* make empty leading where clauses on assoc types trigger lint `deprecated_where_clause_location`
* e.g., `impl Trait for () { type X where = (); }`
|
☔ The latest upstream changes (presumably #121489) made this pull request unmergeable. Please resolve the merge conflicts. |
…iaskrgr Rollup of 5 pull requests Successful merges: - rust-lang#110543 (Make `ReentrantLock` public) - rust-lang#121689 ([rustdoc] Prevent inclusion of whitespace character after macro_rules ident) - rust-lang#121724 (Use `LitKind::Err` for malformed floats) - rust-lang#121735 (pattern analysis: Don't panic when encountering unexpected constructor) - rust-lang#121743 (Opportunistically resolve regions when processing region outlives obligations) Failed merges: - rust-lang#121326 (Detect empty leading where clauses on type aliases) - rust-lang#121416 (Improve error messages for generics with default parameters) - rust-lang#121669 (Count stashed errors again) - rust-lang#121723 (Two diagnostic things) r? `@ghost` `@rustbot` modify labels: rollup
dbd70e5 to
cce8128
Compare
|
@bors r=compiler-errors |
…iaskrgr Rollup of 8 pull requests Successful merges: - rust-lang#121326 (Detect empty leading where clauses on type aliases) - rust-lang#121464 (rustc: Fix wasm64 metadata object files) - rust-lang#121681 (Safe Transmute: Revise safety analysis) - rust-lang#121753 (Add proper cfg to keep only one AlignmentEnum definition for different target_pointer_widths) - rust-lang#121782 (allow statics pointing to mutable statics) - rust-lang#121798 (Fix links in rustc doc) - rust-lang#121806 (add const test for ptr::metadata) - rust-lang#121809 (Remove doc aliases to PATH) r? `@ghost` `@rustbot` modify labels: rollup
Rollup merge of rust-lang#121326 - fmease:detect-empty-leading-where-clauses-on-ty-aliases, r=compiler-errors Detect empty leading where clauses on type aliases 1. commit: refactor the AST of type alias where clauses * I could no longer bear the look of `.0.1` and `.1.0` * Arguably moving `split` out of `TyAlias` into a substruct might not make that much sense from a semantic standpoint since it reprs an index into `TyAlias.predicates` but it's alright and it cleans up the usage sites of `TyAlias` 2. commit: fix an oversight: An empty leading where clause is still a leading where clause * semantically reject empty leading where clauses on lazy type aliases * e.g., on `#![feature(lazy_type_alias)] type X where = ();` * make empty leading where clauses on assoc types trigger lint `deprecated_where_clause_location` * e.g., `impl Trait for () { type X where = (); }`
…clauses-on-ty-aliases, r=compiler-errors
Detect empty leading where clauses on type aliases
1. commit: refactor the AST of type alias where clauses
* I could no longer bear the look of `.0.1` and `.1.0`
* Arguably moving `split` out of `TyAlias` into a substruct might not make that much sense from a semantic standpoint since it reprs an index into `TyAlias.predicates` but it's alright and it cleans up the usage sites of `TyAlias`
2. commit: fix an oversight: An empty leading where clause is still a leading where clause
* semantically reject empty leading where clauses on lazy type aliases
* e.g., on `#![feature(lazy_type_alias)] type X where = ();`
* make empty leading where clauses on assoc types trigger lint `deprecated_where_clause_location`
* e.g., `impl Trait for () { type X where = (); }`
.0.1and.1.0splitout ofTyAliasinto a substruct might not make that much sense from a semantic standpoint since it reprs an index intoTyAlias.predicatesbut it's alright and it cleans up the usage sites ofTyAlias#![feature(lazy_type_alias)] type X where = ();deprecated_where_clause_locationimpl Trait for () { type X where = (); }