Skip to content

Commit a429148

Browse files
committed
Auto merge of rust-lang#101986 - WaffleLapkin:move_lint_note_to_the_bottom, r=estebank
Move lint level source explanation to the bottom So, uhhhhh r? `@estebank` ## User-facing change "note: `#[warn(...)]` on by default" and such are moved to the bottom of the diagnostic: ```diff - = note: `#[warn(unsupported_calling_conventions)]` on by default = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! = note: for more information, see issue rust-lang#87678 <rust-lang#87678> + = note: `#[warn(unsupported_calling_conventions)]` on by default ``` Why warning is enabled is the least important thing, so it shouldn't be the first note the user reads, IMO. ## Developer-facing change `struct_span_lint` and similar methods have a different signature. Before: `..., impl for<'a> FnOnce(LintDiagnosticBuilder<'a, ()>)` After: `..., impl Into<DiagnosticMessage>, impl for<'a, 'b> FnOnce(&'b mut DiagnosticBuilder<'a, ()>) -> &'b mut DiagnosticBuilder<'a, ()>` The reason for this is that `struct_span_lint` needs to edit the diagnostic _after_ `decorate` closure is called. This also makes lint code a little bit nicer in my opinion. Another option is to use `impl for<'a> FnOnce(LintDiagnosticBuilder<'a, ()>) -> DiagnosticBuilder<'a, ()>` altough I don't _really_ see reasons to do `let lint = lint.build(message)` everywhere. ## Subtle problem By moving the message outside of the closure (that may not be called if the lint is disabled) `format!(...)` is executed earlier, possibly formatting `Ty` which may call a query that trims paths that crashes the compiler if there were no warnings... I don't think it's that big of a deal, considering that we move from `format!(...)` to `fluent` (which is lazy by-default) anyway, however this required adding a workaround which is unfortunate. ## P.S. I'm sorry, I do not how to make this PR smaller/easier to review. Changes to the lint API affect SO MUCH 😢
2 parents f37d280 + 32cf908 commit a429148

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

tests/fail/erroneous_const2.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ error: any use of this value will cause an error
44
LL | const FOO: u32 = [X - Y, Y - X][(X < Y) as usize];
55
| -------------- ^^^^^ attempt to compute `5_u32 - 6_u32`, which would overflow
66
|
7-
= note: `#[deny(const_err)]` on by default
87
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
98
= note: for more information, see issue #71800 <https://github.com/rust-lang/rust/issues/71800>
9+
= note: `#[deny(const_err)]` on by default
1010

1111
error[E0080]: evaluation of constant value failed
1212
--> $DIR/erroneous_const2.rs:LL:CC

0 commit comments

Comments
 (0)