1
1
#![ feature( rustc_private) ]
2
2
#![ feature( once_cell) ]
3
- #![ feature( bool_to_option) ]
4
3
#![ cfg_attr( feature = "deny-warnings" , deny( warnings) ) ]
5
4
// warn on lints, that are included in `rust-lang/rust`s bootstrap
6
5
#![ warn( rust_2018_idioms, unused_lifetimes) ]
@@ -20,7 +19,6 @@ use rustc_tools_util::VersionInfo;
20
19
21
20
use std:: borrow:: Cow ;
22
21
use std:: env;
23
- use std:: iter;
24
22
use std:: lazy:: SyncLazy ;
25
23
use std:: ops:: Deref ;
26
24
use std:: panic;
@@ -49,6 +47,20 @@ fn arg_value<'a, T: Deref<Target = str>>(
49
47
None
50
48
}
51
49
50
+ #[ test]
51
+ fn test_arg_value ( ) {
52
+ let args = & [ "--bar=bar" , "--foobar" , "123" , "--foo" ] ;
53
+
54
+ assert_eq ! ( arg_value( & [ ] as & [ & str ] , "--foobar" , |_| true ) , None ) ;
55
+ assert_eq ! ( arg_value( args, "--bar" , |_| false ) , None ) ;
56
+ assert_eq ! ( arg_value( args, "--bar" , |_| true ) , Some ( "bar" ) ) ;
57
+ assert_eq ! ( arg_value( args, "--bar" , |p| p == "bar" ) , Some ( "bar" ) ) ;
58
+ assert_eq ! ( arg_value( args, "--bar" , |p| p == "foo" ) , None ) ;
59
+ assert_eq ! ( arg_value( args, "--foobar" , |p| p == "foo" ) , None ) ;
60
+ assert_eq ! ( arg_value( args, "--foobar" , |p| p == "123" ) , Some ( "123" ) ) ;
61
+ assert_eq ! ( arg_value( args, "--foo" , |_| true ) , None ) ;
62
+ }
63
+
52
64
struct DefaultCallbacks ;
53
65
impl rustc_driver:: Callbacks for DefaultCallbacks { }
54
66
@@ -170,28 +182,6 @@ fn toolchain_path(home: Option<String>, toolchain: Option<String>) -> Option<Pat
170
182
} )
171
183
}
172
184
173
- fn remove_clippy_args < ' a , T , U , I > ( args : & mut Vec < T > , clippy_args : I )
174
- where
175
- T : AsRef < str > ,
176
- U : AsRef < str > + ?Sized + ' a ,
177
- I : Iterator < Item = & ' a U > + Clone ,
178
- {
179
- let args_iter = clippy_args. map ( AsRef :: as_ref) ;
180
- let args_count = args_iter. clone ( ) . count ( ) ;
181
-
182
- if args_count > 0 {
183
- if let Some ( start) = args. windows ( args_count) . enumerate ( ) . find_map ( |( current, window) | {
184
- window
185
- . iter ( )
186
- . map ( AsRef :: as_ref)
187
- . eq ( args_iter. clone ( ) )
188
- . then_some ( current)
189
- } ) {
190
- args. drain ( start..start + args_count) ;
191
- }
192
- }
193
- }
194
-
195
185
#[ allow( clippy:: too_many_lines) ]
196
186
pub fn main ( ) {
197
187
rustc_driver:: init_rustc_env_logger ( ) ;
@@ -288,9 +278,20 @@ pub fn main() {
288
278
args. extend ( vec ! [ "--sysroot" . into( ) , sys_root] ) ;
289
279
} ;
290
280
291
- let clippy_args = env:: var ( "CLIPPY_ARGS" ) . unwrap_or_default ( ) ;
292
- let clippy_args = clippy_args. split_whitespace ( ) ;
293
- let no_deps = clippy_args. clone ( ) . any ( |flag| flag == "--no-deps" ) ;
281
+ let mut no_deps = false ;
282
+ let clippy_args = env:: var ( "CLIPPY_ARGS" )
283
+ . unwrap_or_default ( )
284
+ . split ( "__CLIPPY_HACKERY__" )
285
+ . filter_map ( |s| match s {
286
+ "" => None ,
287
+ "--no-deps" => {
288
+ no_deps = true ;
289
+ None
290
+ } ,
291
+ _ => Some ( s. to_string ( ) ) ,
292
+ } )
293
+ . chain ( vec ! [ "--cfg" . into( ) , r#"feature="cargo-clippy""# . into( ) ] )
294
+ . collect :: < Vec < String > > ( ) ;
294
295
295
296
// We enable Clippy if one of the following conditions is met
296
297
// - IF Clippy is run on its test suite OR
@@ -303,11 +304,7 @@ pub fn main() {
303
304
304
305
let clippy_enabled = clippy_tests_set || ( !cap_lints_allow && ( !no_deps || in_primary_package) ) ;
305
306
if clippy_enabled {
306
- remove_clippy_args ( & mut args, iter:: once ( "--no-deps" ) ) ;
307
- args. extend ( vec ! [ "--cfg" . into( ) , r#"feature="cargo-clippy""# . into( ) ] ) ;
308
- } else {
309
- // Remove all flags passed through RUSTFLAGS if Clippy is not enabled.
310
- remove_clippy_args ( & mut args, clippy_args) ;
307
+ args. extend ( clippy_args) ;
311
308
}
312
309
313
310
let mut clippy = ClippyCallbacks ;
@@ -318,58 +315,3 @@ pub fn main() {
318
315
rustc_driver:: RunCompiler :: new ( & args, callbacks) . run ( )
319
316
} ) )
320
317
}
321
-
322
- #[ cfg( test) ]
323
- mod tests {
324
- use super :: * ;
325
-
326
- #[ test]
327
- fn test_arg_value ( ) {
328
- let args = & [ "--bar=bar" , "--foobar" , "123" , "--foo" ] ;
329
-
330
- assert_eq ! ( arg_value( & [ ] as & [ & str ] , "--foobar" , |_| true ) , None ) ;
331
- assert_eq ! ( arg_value( args, "--bar" , |_| false ) , None ) ;
332
- assert_eq ! ( arg_value( args, "--bar" , |_| true ) , Some ( "bar" ) ) ;
333
- assert_eq ! ( arg_value( args, "--bar" , |p| p == "bar" ) , Some ( "bar" ) ) ;
334
- assert_eq ! ( arg_value( args, "--bar" , |p| p == "foo" ) , None ) ;
335
- assert_eq ! ( arg_value( args, "--foobar" , |p| p == "foo" ) , None ) ;
336
- assert_eq ! ( arg_value( args, "--foobar" , |p| p == "123" ) , Some ( "123" ) ) ;
337
- assert_eq ! ( arg_value( args, "--foo" , |_| true ) , None ) ;
338
- }
339
-
340
- #[ test]
341
- fn removes_clippy_args_from_start ( ) {
342
- let mut args = vec ! [ "-D" , "clippy::await_holding_lock" , "--cfg" , r#"feature="some_feat""# ] ;
343
- let clippy_args = [ "-D" , "clippy::await_holding_lock" ] . iter ( ) ;
344
-
345
- remove_clippy_args ( & mut args, clippy_args) ;
346
- assert_eq ! ( args, & [ "--cfg" , r#"feature="some_feat""# ] ) ;
347
- }
348
-
349
- #[ test]
350
- fn removes_clippy_args_from_end ( ) {
351
- let mut args = vec ! [ "-Zui-testing" , "-A" , "clippy::empty_loop" , "--no-deps" ] ;
352
- let clippy_args = [ "-A" , "clippy::empty_loop" , "--no-deps" ] . iter ( ) ;
353
-
354
- remove_clippy_args ( & mut args, clippy_args) ;
355
- assert_eq ! ( args, & [ "-Zui-testing" ] ) ;
356
- }
357
-
358
- #[ test]
359
- fn removes_clippy_args_from_middle ( ) {
360
- let mut args = vec ! [ "-Zui-testing" , "-W" , "clippy::filter_map" , "-L" , "serde" ] ;
361
- let clippy_args = [ "-W" , "clippy::filter_map" ] . iter ( ) ;
362
-
363
- remove_clippy_args ( & mut args, clippy_args) ;
364
- assert_eq ! ( args, & [ "-Zui-testing" , "-L" , "serde" ] ) ;
365
- }
366
-
367
- #[ test]
368
- fn no_clippy_args_to_remove ( ) {
369
- let mut args = vec ! [ "-Zui-testing" , "-L" , "serde" ] ;
370
- let clippy_args: [ & str ; 0 ] = [ ] ;
371
-
372
- remove_clippy_args ( & mut args, clippy_args. iter ( ) ) ;
373
- assert_eq ! ( args, & [ "-Zui-testing" , "-L" , "serde" ] ) ;
374
- }
375
- }
0 commit comments