]> git.proxmox.com Git - rustc.git/blobdiff - compiler/rustc_lint/src/expect.rs
New upstream version 1.62.1+dfsg1
[rustc.git] / compiler / rustc_lint / src / expect.rs
index 74fef0be9e98c4fe4e178ef8d2146ca9bbb2499a..dc48ac0a618e7b1574adc13346ab3bd252f4618a 100644 (file)
@@ -1,10 +1,16 @@
 use crate::builtin;
 use rustc_hir::HirId;
+use rustc_middle::ty::query::Providers;
 use rustc_middle::{lint::LintExpectation, ty::TyCtxt};
 use rustc_session::lint::LintExpectationId;
 use rustc_span::symbol::sym;
+use rustc_span::Symbol;
 
-pub fn check_expectations(tcx: TyCtxt<'_>) {
+pub(crate) fn provide(providers: &mut Providers) {
+    *providers = Providers { check_expectations, ..*providers };
+}
+
+fn check_expectations(tcx: TyCtxt<'_>, tool_filter: Option<Symbol>) {
     if !tcx.sess.features_untracked().enabled(sym::lint_reasons) {
         return;
     }
@@ -13,7 +19,9 @@ pub fn check_expectations(tcx: TyCtxt<'_>) {
     let lint_expectations = &tcx.lint_levels(()).lint_expectations;
 
     for (id, expectation) in lint_expectations {
-        if !fulfilled_expectations.contains(id) {
+        if !fulfilled_expectations.contains(id)
+            && tool_filter.map_or(true, |filter| expectation.lint_tool == Some(filter))
+        {
             // This check will always be true, since `lint_expectations` only
             // holds stable ids
             if let LintExpectationId::Stable { hir_id, .. } = id {
@@ -37,7 +45,7 @@ fn emit_unfulfilled_expectation_lint(
         |diag| {
             let mut diag = diag.build("this lint expectation is unfulfilled");
             if let Some(rationale) = expectation.reason {
-                diag.note(&rationale.as_str());
+                diag.note(rationale.as_str());
             }
 
             if expectation.is_unfulfilled_lint_expectations {