diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-02-29 20:50:02 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-29 20:50:02 +0100 |
| commit | dd4ecd1cf4a59650747e7aeabaed9b24656fc88a (patch) | |
| tree | 22dffc1b7306ffa5aed5f3e4002429e7e48ff8cf /compiler/rustc_lint/src | |
| parent | 1a1876c9790f168fb51afa335a7ba3e6fc267d75 (diff) | |
| parent | cce81289e6baea01c3cd67a6b85fffb3504d0a0b (diff) | |
| download | rust-dd4ecd1cf4a59650747e7aeabaed9b24656fc88a.tar.gz rust-dd4ecd1cf4a59650747e7aeabaed9b24656fc88a.zip | |
Rollup merge of #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 = (); }`
Diffstat (limited to 'compiler/rustc_lint/src')
| -rw-r--r-- | compiler/rustc_lint/src/context/diagnostics.rs | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/compiler/rustc_lint/src/context/diagnostics.rs b/compiler/rustc_lint/src/context/diagnostics.rs index 71aef50391d..14e4c79563b 100644 --- a/compiler/rustc_lint/src/context/diagnostics.rs +++ b/compiler/rustc_lint/src/context/diagnostics.rs @@ -428,15 +428,22 @@ pub(super) fn builtin(sess: &Session, diagnostic: BuiltinLintDiagnostics, diag: diag.note("see <https://doc.rust-lang.org/nightly/unstable-book/compiler-flags/check-cfg.html> for more information about checking conditional configuration"); } } - BuiltinLintDiagnostics::DeprecatedWhereclauseLocation(new_span, suggestion) => { - diag.multipart_suggestion( - "move it to the end of the type declaration", - vec![(diag.span.primary_span().unwrap(), "".to_string()), (new_span, suggestion)], - Applicability::MachineApplicable, - ); - diag.note( - "see issue #89122 <https://github.com/rust-lang/rust/issues/89122> for more information", - ); + BuiltinLintDiagnostics::DeprecatedWhereclauseLocation(sugg) => { + let left_sp = diag.span.primary_span().unwrap(); + match sugg { + Some((right_sp, sugg)) => diag.multipart_suggestion( + "move it to the end of the type declaration", + vec![(left_sp, String::new()), (right_sp, sugg)], + Applicability::MachineApplicable, + ), + None => diag.span_suggestion( + left_sp, + "remove this `where`", + "", + Applicability::MachineApplicable, + ), + }; + diag.note("see issue #89122 <https://github.com/rust-lang/rust/issues/89122> for more information"); } BuiltinLintDiagnostics::SingleUseLifetime { param_span, |
