11#![ feature( rustc_private) ]
22#![ feature( once_cell) ]
3- #![ feature( bool_to_option) ]
43#![ cfg_attr( feature = "deny-warnings" , deny( warnings) ) ]
54// warn on lints, that are included in `rust-lang/rust`s bootstrap
65#![ warn( rust_2018_idioms, unused_lifetimes) ]
@@ -20,7 +19,6 @@ use rustc_tools_util::VersionInfo;
2019
2120use std:: borrow:: Cow ;
2221use std:: env;
23- use std:: iter;
2422use std:: lazy:: SyncLazy ;
2523use std:: ops:: Deref ;
2624use std:: panic;
@@ -49,6 +47,20 @@ fn arg_value<'a, T: Deref<Target = str>>(
4947 None
5048}
5149
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+
5264struct DefaultCallbacks ;
5365impl rustc_driver:: Callbacks for DefaultCallbacks { }
5466
@@ -170,28 +182,6 @@ fn toolchain_path(home: Option<String>, toolchain: Option<String>) -> Option<Pat
170182 } )
171183}
172184
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-
195185#[ allow( clippy:: too_many_lines) ]
196186pub fn main ( ) {
197187 rustc_driver:: init_rustc_env_logger ( ) ;
@@ -288,9 +278,20 @@ pub fn main() {
288278 args. extend ( vec ! [ "--sysroot" . into( ) , sys_root] ) ;
289279 } ;
290280
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 > > ( ) ;
294295
295296 // We enable Clippy if one of the following conditions is met
296297 // - IF Clippy is run on its test suite OR
@@ -303,11 +304,7 @@ pub fn main() {
303304
304305 let clippy_enabled = clippy_tests_set || ( !cap_lints_allow && ( !no_deps || in_primary_package) ) ;
305306 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) ;
311308 }
312309
313310 let mut clippy = ClippyCallbacks ;
@@ -318,58 +315,3 @@ pub fn main() {
318315 rustc_driver:: RunCompiler :: new ( & args, callbacks) . run ( )
319316 } ) )
320317}
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