Auto merge of #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 #87678 <https://github.com/rust-lang/rust/issues/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 😢
This commit is contained in:
commit
9e8f53d09a
207 changed files with 260 additions and 267 deletions
|
|
@ -117,11 +117,13 @@ impl EarlyLintPass for ModStyle {
|
|||
cx.struct_span_lint(
|
||||
SELF_NAMED_MODULE_FILES,
|
||||
Span::new(file.start_pos, file.start_pos, SyntaxContext::root(), None),
|
||||
|build| {
|
||||
let mut lint =
|
||||
build.build(&format!("`mod.rs` files are required, found `{}`", path.display()));
|
||||
lint.help(&format!("move `{}` to `{}`", path.display(), correct.display(),));
|
||||
lint.emit();
|
||||
format!("`mod.rs` files are required, found `{}`", path.display()),
|
||||
|lint| {
|
||||
lint.help(format!(
|
||||
"move `{}` to `{}`",
|
||||
path.display(),
|
||||
correct.display(),
|
||||
))
|
||||
},
|
||||
);
|
||||
}
|
||||
|
|
@ -156,11 +158,8 @@ fn check_self_named_mod_exists(cx: &EarlyContext<'_>, path: &Path, file: &Source
|
|||
cx.struct_span_lint(
|
||||
MOD_MODULE_FILES,
|
||||
Span::new(file.start_pos, file.start_pos, SyntaxContext::root(), None),
|
||||
|build| {
|
||||
let mut lint = build.build(&format!("`mod.rs` files are not allowed, found `{}`", path.display()));
|
||||
lint.help(&format!("move `{}` to `{}`", path.display(), mod_file.display(),));
|
||||
lint.emit();
|
||||
},
|
||||
format!("`mod.rs` files are not allowed, found `{}`", path.display()),
|
||||
|lint| lint.help(format!("move `{}` to `{}`", path.display(), mod_file.display())),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue