Move lint level source explanation to the bottom#101986
Move lint level source explanation to the bottom#101986bors merged 10 commits intorust-lang:masterfrom
Conversation
|
Some changes occurred in src/tools/clippy cc @rust-lang/clippy Some changes occurred in const_evaluatable.rs cc @lcnr
cc @davidtwco, @compiler-errors, @JohnTitor, @estebank, @TaKO8Ki
cc @davidtwco, @compiler-errors, @JohnTitor, @estebank, @TaKO8Ki Some changes occurred to MIR optimizations cc @rust-lang/wg-mir-opt |
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
Will this go away after the migration to translatable messages?
There was a problem hiding this comment.
Yes, this is the intention.
There was a problem hiding this comment.
Should we add a rustc lint to detect when we're using Ty: Display without wrapping it in this? (Maybe not to address in this PR, but I know I'm bound to make that mistake myself at some point in the future.)
There was a problem hiding this comment.
I think we should add a lint, yes.
There was a problem hiding this comment.
Idle thought: maybe let's make this argument always DelayDm (or maybe "just" the closure?) That way you make it less likely to make the mistake? Not necessary for this PR (just a thought so we don't impl yet another complex internal lint.)
There was a problem hiding this comment.
That is an option. Maybe a trait like IntoLintMessage implemented for F: FnOnce() -> String and the fluent thing. We could also do the same with Into<SubdiagnosticMessage>, but that would also affect non-lints, so idk.
|
You'll need to re |
|
I forget that clippy exists every time xd |
85dcef6 to
6b5ba20
Compare
|
The Miri subtree was changed cc @rust-lang/miri |
f256d8e to
d3bf085
Compare
|
I think this should be at least |
|
☔ The latest upstream changes (presumably #102064) made this pull request unmergeable. Please resolve the merge conflicts. |
|
r=me after rebasing |
d3bf085 to
6bc1170
Compare
|
I got more conflicts, while rebasing ✌️ brb rebasing again |
6bc1170 to
ca532df
Compare
|
Finished benchmarking commit (744e397): comparison URL. Overall result: ❌✅ regressions and improvements - ACTION NEEDEDNext Steps: If you can justify the regressions found in this perf run, please indicate this with @rustbot label: +perf-regression Instruction countThis is a highly reliable metric that was used to determine the overall result at the top of this comment.
Max RSS (memory usage)ResultsThis is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.
CyclesResultsThis is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.
Footnotes |
|
The tiny icount regressions are matched or exceeded by the tiny icount improvements. This seems fine. @rustbot label: +perf-regression-triaged |
…illot Remove a couple lifetimes that can be infered From the review: rust-lang#101986 (comment) r? `@cjgillot`
…ottom, 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 😢
| err.code(DiagnosticId::Lint { name, has_future_breakage, is_force_warn: false }); | ||
| decorate(LintDiagnosticBuilder::new(err)); | ||
|
|
||
| decorate(&mut err); |
There was a problem hiding this comment.
Why does decorate have a return vale, if it is being ignored?
There was a problem hiding this comment.
To optimize the most common case, #101986 (comment)
There was a problem hiding this comment.
Could you add doc comments explaining that to all functions that take such a strangely typed closure? I spent 15min digging through the code to figure out what the return value does...
Slightly tweak comments wrt `lint_overflowing_range_endpoint` From the review: rust-lang#101986 (comment) It _seemed_ that the lint was not emitted when the `if` check failed, but _actually_ this happens already in a special case and the lint is emitted outside of this function, if this function doesn't. I've cleared up the code/comments a bit, so it's more obvious :) r? `@estebank`
Slightly tweak comments wrt `lint_overflowing_range_endpoint` From the review: rust-lang#101986 (comment) It _seemed_ that the lint was not emitted when the `if` check failed, but _actually_ this happens already in a special case and the lint is emitted outside of this function, if this function doesn't. I've cleared up the code/comments a bit, so it's more obvious :) r? ``@estebank``
Slightly tweak comments wrt `lint_overflowing_range_endpoint` From the review: rust-lang#101986 (comment) It _seemed_ that the lint was not emitted when the `if` check failed, but _actually_ this happens already in a special case and the lint is emitted outside of this function, if this function doesn't. I've cleared up the code/comments a bit, so it's more obvious :) r? ```@estebank```
…ottom, 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 😢
Remove a couple lifetimes that can be infered From the review: rust-lang/rust#101986 (comment) r? `@cjgillot`
Remove a couple lifetimes that can be infered From the review: rust-lang/rust#101986 (comment) r? `@cjgillot`
So, uhhhhh
r? @estebank
User-facing change
"note:
#[warn(...)]on by default" and such are moved to the bottom of the diagnostic: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_lintand 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_lintneeds to edit the diagnostic afterdecorateclosure 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 dolet 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 formattingTywhich 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!(...)tofluent(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 😢