10
10
// (Currently there is no way to opt into sysroot crates without `extern crate`.)
11
11
extern crate rustc_data_structures;
12
12
extern crate rustc_driver;
13
+ extern crate rustc_errors;
13
14
extern crate rustc_interface;
14
15
extern crate rustc_session;
15
16
extern crate rustc_span;
@@ -23,6 +24,7 @@ use clippy_config::Conf;
23
24
use clippy_utils:: sym;
24
25
use declare_clippy_lint:: LintListBuilder ;
25
26
use rustc_data_structures:: fx:: FxHashSet ;
27
+ use rustc_errors:: DiagInner ;
26
28
use rustc_interface:: interface;
27
29
use rustc_session:: config:: ErrorOutputType ;
28
30
use rustc_session:: parse:: ParseSess ;
@@ -165,7 +167,7 @@ impl rustc_driver::Callbacks for ClippyCallbacks {
165
167
166
168
let conf = clippy_config:: Conf :: read ( sess, & conf_path) ;
167
169
let disabled = build_disabled_set ( sess, conf, testing) ;
168
- clippy_utils :: diagnostics :: set_disabled ( disabled) ;
170
+ set_post_expect_filter ( sess , disabled) ;
169
171
170
172
let mut list_builder = LintListBuilder :: default ( ) ;
171
173
list_builder. insert ( clippy_lints:: declared_lints:: LINTS ) ;
@@ -218,6 +220,18 @@ fn build_disabled_set(sess: &Session, conf: &'static Conf, testing: bool) -> FxH
218
220
disabled
219
221
}
220
222
223
+ #[ allow( clippy:: implicit_hasher) ]
224
+ pub fn set_post_expect_filter ( sess : & Session , disabled : FxHashSet < & ' static str > ) {
225
+ if !disabled. is_empty ( ) {
226
+ sess. dcx ( ) . set_post_expect_filter ( Box :: new ( move |diag : & DiagInner | {
227
+ diag. lint_name ( ) . is_some_and ( |name| {
228
+ let name = name. strip_prefix ( "clippy::" ) . unwrap_or ( name) ;
229
+ disabled. contains ( name)
230
+ } )
231
+ } ) ) ;
232
+ }
233
+ }
234
+
221
235
#[ allow( clippy:: ignored_unit_patterns) ]
222
236
fn display_help ( ) {
223
237
println ! ( "{}" , help_message( ) ) ;
0 commit comments