diff options
| author | xFrednet <xFrednet@gmail.com> | 2022-06-05 12:33:45 +0200 |
|---|---|---|
| committer | xFrednet <xFrednet@gmail.com> | 2022-06-16 08:16:43 +0200 |
| commit | 8527a3d36985bed55de1832c3c1f3d470720bb0b (patch) | |
| tree | ad2f51bc362ba29e281ac832a2a8e62b7b9b8b2c /compiler/rustc_middle/src | |
| parent | ec55c61305eaf385fc1b93ac9a78284b4d887fe5 (diff) | |
| download | rust-8527a3d36985bed55de1832c3c1f3d470720bb0b.tar.gz rust-8527a3d36985bed55de1832c3c1f3d470720bb0b.zip | |
Support lint expectations for `--force-warn` lints (RFC 2383)
Diffstat (limited to 'compiler/rustc_middle/src')
| -rw-r--r-- | compiler/rustc_middle/src/lint.rs | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/compiler/rustc_middle/src/lint.rs b/compiler/rustc_middle/src/lint.rs index c7c5f56867a..215d8decf2a 100644 --- a/compiler/rustc_middle/src/lint.rs +++ b/compiler/rustc_middle/src/lint.rs @@ -115,7 +115,7 @@ impl LintLevelSets { // 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 = if let LintLevelSource::CommandLine(_, Level::ForceWarn(_)) = src { level } else { cmp::min(level, self.lint_cap) @@ -266,7 +266,7 @@ pub fn explain_lint_level_source( Level::Deny => "-D", Level::Forbid => "-F", Level::Allow => "-A", - Level::ForceWarn => "--force-warn", + Level::ForceWarn(_) => "--force-warn", Level::Expect(_) => { unreachable!("the expect level does not have a commandline flag") } @@ -352,8 +352,14 @@ pub fn struct_lint_level<'s, 'd>( // create a `DiagnosticBuilder` and continue as we would for warnings. sess.struct_expect("", expect_id) } - (Level::Warn | Level::ForceWarn, Some(span)) => sess.struct_span_warn(span, ""), - (Level::Warn | Level::ForceWarn, None) => sess.struct_warn(""), + (Level::ForceWarn(Some(expect_id)), Some(span)) => { + sess.struct_span_warn_with_expectation(span, "", expect_id) + } + (Level::ForceWarn(Some(expect_id)), None) => { + sess.struct_warn_with_expectation("", expect_id) + } + (Level::Warn | Level::ForceWarn(None), Some(span)) => sess.struct_span_warn(span, ""), + (Level::Warn | Level::ForceWarn(None), None) => sess.struct_warn(""), (Level::Deny | Level::Forbid, Some(span)) => { let mut builder = sess.diagnostic().struct_err_lint(""); builder.set_span(span); @@ -398,7 +404,7 @@ pub fn struct_lint_level<'s, 'd>( explain_lint_level_source(lint, level, src, &mut err); let name = lint.name_lower(); - let is_force_warn = matches!(level, Level::ForceWarn); + let is_force_warn = matches!(level, Level::ForceWarn(_)); err.code(DiagnosticId::Lint { name, has_future_breakage, is_force_warn }); if let Some(future_incompatible) = future_incompatible { |
