mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-13 12:36:47 +00:00
New force_warn diagnostic builder and ensure cap-lints doesn't reduce force_warn level
This commit is contained in:
parent
a3d6905053
commit
33cc7b1fe2
@ -521,12 +521,24 @@ impl Handler {
|
||||
}
|
||||
|
||||
/// Construct a builder at the `Warning` level at the given `span` and with the `msg`.
|
||||
/// Cancel the builder if warnings cannot be emitted
|
||||
pub fn struct_span_warn(&self, span: impl Into<MultiSpan>, msg: &str) -> DiagnosticBuilder<'_> {
|
||||
let mut result = self.struct_warn(msg);
|
||||
result.set_span(span);
|
||||
result
|
||||
}
|
||||
|
||||
/// Construct a builder at the `Warning` level at the given `span` and with the `msg`.
|
||||
pub fn struct_span_force_warn(
|
||||
&self,
|
||||
span: impl Into<MultiSpan>,
|
||||
msg: &str,
|
||||
) -> DiagnosticBuilder<'_> {
|
||||
let mut result = self.struct_force_warn(msg);
|
||||
result.set_span(span);
|
||||
result
|
||||
}
|
||||
|
||||
/// Construct a builder at the `Allow` level at the given `span` and with the `msg`.
|
||||
pub fn struct_span_allow(
|
||||
&self,
|
||||
@ -552,6 +564,7 @@ impl Handler {
|
||||
}
|
||||
|
||||
/// Construct a builder at the `Warning` level with the `msg`.
|
||||
/// Cancel the builder if warnings cannot be emitted
|
||||
pub fn struct_warn(&self, msg: &str) -> DiagnosticBuilder<'_> {
|
||||
let mut result = DiagnosticBuilder::new(self, Level::Warning, msg);
|
||||
if !self.flags.can_emit_warnings {
|
||||
@ -560,6 +573,11 @@ impl Handler {
|
||||
result
|
||||
}
|
||||
|
||||
/// Construct a builder at the `Warning` level with the `msg`.
|
||||
pub fn struct_force_warn(&self, msg: &str) -> DiagnosticBuilder<'_> {
|
||||
DiagnosticBuilder::new(self, Level::Warning, msg)
|
||||
}
|
||||
|
||||
/// Construct a builder at the `Allow` level with the `msg`.
|
||||
pub fn struct_allow(&self, msg: &str) -> DiagnosticBuilder<'_> {
|
||||
DiagnosticBuilder::new(self, Level::Allow, msg)
|
||||
|
@ -108,8 +108,13 @@ impl LintLevelSets {
|
||||
}
|
||||
}
|
||||
|
||||
// Ensure that we never exceed the `--cap-lints` argument.
|
||||
level = cmp::min(level, self.lint_cap);
|
||||
// Ensure that we never exceed the `--cap-lints` argument
|
||||
// unless the source is a --force-warn
|
||||
level = if let LintLevelSource::CommandLine(_, Level::ForceWarn) = src {
|
||||
level
|
||||
} else {
|
||||
cmp::min(level, self.lint_cap)
|
||||
};
|
||||
|
||||
if let Some(driver_level) = sess.driver_lint_caps.get(&LintId::of(lint)) {
|
||||
// Ensure that we never exceed driver level.
|
||||
@ -257,22 +262,14 @@ pub fn struct_lint_level<'s, 'd>(
|
||||
} else {
|
||||
sess.struct_allow("")
|
||||
}
|
||||
} else if is_force_warn {
|
||||
let mut err = if let Some(span) = span {
|
||||
sess.struct_span_warn(span, "")
|
||||
} else {
|
||||
sess.struct_warn("")
|
||||
};
|
||||
// Ensure force-warn warns even if the diagnostic has
|
||||
// been canceled for reasons like `--cap-lints`
|
||||
err.level = rustc_errors::Level::Warning;
|
||||
err
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
(Level::Warn | Level::ForceWarn, Some(span)) => sess.struct_span_warn(span, ""),
|
||||
(Level::Warn | Level::ForceWarn, None) => sess.struct_warn(""),
|
||||
(Level::Warn, Some(span)) => sess.struct_span_warn(span, ""),
|
||||
(Level::Warn, None) => sess.struct_warn(""),
|
||||
(Level::ForceWarn, Some(span)) => sess.struct_span_force_warn(span, ""),
|
||||
(Level::ForceWarn, None) => sess.struct_force_warn(""),
|
||||
(Level::Deny | Level::Forbid, Some(span)) => sess.struct_span_err(span, ""),
|
||||
(Level::Deny | Level::Forbid, None) => sess.struct_err(""),
|
||||
};
|
||||
|
@ -369,6 +369,13 @@ impl Session {
|
||||
pub fn struct_span_warn<S: Into<MultiSpan>>(&self, sp: S, msg: &str) -> DiagnosticBuilder<'_> {
|
||||
self.diagnostic().struct_span_warn(sp, msg)
|
||||
}
|
||||
pub fn struct_span_force_warn<S: Into<MultiSpan>>(
|
||||
&self,
|
||||
sp: S,
|
||||
msg: &str,
|
||||
) -> DiagnosticBuilder<'_> {
|
||||
self.diagnostic().struct_span_force_warn(sp, msg)
|
||||
}
|
||||
pub fn struct_span_warn_with_code<S: Into<MultiSpan>>(
|
||||
&self,
|
||||
sp: S,
|
||||
@ -380,6 +387,9 @@ impl Session {
|
||||
pub fn struct_warn(&self, msg: &str) -> DiagnosticBuilder<'_> {
|
||||
self.diagnostic().struct_warn(msg)
|
||||
}
|
||||
pub fn struct_force_warn(&self, msg: &str) -> DiagnosticBuilder<'_> {
|
||||
self.diagnostic().struct_force_warn(msg)
|
||||
}
|
||||
pub fn struct_span_allow<S: Into<MultiSpan>>(&self, sp: S, msg: &str) -> DiagnosticBuilder<'_> {
|
||||
self.diagnostic().struct_span_allow(sp, msg)
|
||||
}
|
||||
|
15
src/test/ui/lint/force-warn/force-warn-cap-lints-warn.rs
Normal file
15
src/test/ui/lint/force-warn/force-warn-cap-lints-warn.rs
Normal file
@ -0,0 +1,15 @@
|
||||
// compile-flags: --cap-lints warn --force-warns rust-2021-compatibility -Zunstable-options
|
||||
// check-pass
|
||||
#![allow(ellipsis_inclusive_range_patterns)]
|
||||
|
||||
pub fn f() -> bool {
|
||||
let x = 123;
|
||||
match x {
|
||||
0...100 => true,
|
||||
//~^ WARN range patterns are deprecated
|
||||
//~| WARN this is accepted in the current edition
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
12
src/test/ui/lint/force-warn/force-warn-cap-lints-warn.stderr
Normal file
12
src/test/ui/lint/force-warn/force-warn-cap-lints-warn.stderr
Normal file
@ -0,0 +1,12 @@
|
||||
warning: `...` range patterns are deprecated
|
||||
--> $DIR/force-warn-cap-lints-warn.rs:8:10
|
||||
|
|
||||
LL | 0...100 => true,
|
||||
| ^^^ help: use `..=` for an inclusive range
|
||||
|
|
||||
= note: `--force-warns ellipsis-inclusive-range-patterns` implied by `--force-warns rust-2021-compatibility`
|
||||
= warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021!
|
||||
= note: for more information, see issue #80165 <https://github.com/rust-lang/rust/issues/80165>
|
||||
|
||||
warning: 1 warning emitted
|
||||
|
@ -1,5 +1,5 @@
|
||||
warning: trait objects without an explicit `dyn` are deprecated
|
||||
--> $DIR/force-warns-cap-lints.rs:6:25
|
||||
--> $DIR/force-warns-cap-lints-allow.rs:6:25
|
||||
|
|
||||
LL | pub fn function(_x: Box<SomeTrait>) {}
|
||||
| ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait`
|
Loading…
Reference in New Issue
Block a user