@@ -295,123 +295,119 @@ fn toolchain_path(home: Option<String>, toolchain: Option<String>) -> Option<Pat
295
295
pub fn main ( ) {
296
296
rustc_driver:: init_rustc_env_logger ( ) ;
297
297
lazy_static:: initialize ( & ICE_HOOK ) ;
298
- exit (
299
- rustc_driver:: catch_fatal_errors ( move || {
300
- let mut orig_args: Vec < String > = env:: args ( ) . collect ( ) ;
301
-
302
- if orig_args. iter ( ) . any ( |a| a == "--version" || a == "-V" ) {
303
- let version_info = rustc_tools_util:: get_version_info!( ) ;
304
- println ! ( "{}" , version_info) ;
305
- exit ( 0 ) ;
306
- }
298
+ exit ( rustc_driver:: catch_with_exit_code ( move || {
299
+ let mut orig_args: Vec < String > = env:: args ( ) . collect ( ) ;
307
300
308
- // Get the sysroot, looking from most specific to this invocation to the least:
309
- // - command line
310
- // - runtime environment
311
- // - SYSROOT
312
- // - RUSTUP_HOME, MULTIRUST_HOME, RUSTUP_TOOLCHAIN, MULTIRUST_TOOLCHAIN
313
- // - sysroot from rustc in the path
314
- // - compile-time environment
315
- // - SYSROOT
316
- // - RUSTUP_HOME, MULTIRUST_HOME, RUSTUP_TOOLCHAIN, MULTIRUST_TOOLCHAIN
317
- let sys_root_arg = arg_value ( & orig_args, "--sysroot" , |_| true ) ;
318
- let have_sys_root_arg = sys_root_arg. is_some ( ) ;
319
- let sys_root = sys_root_arg
320
- . map ( PathBuf :: from)
321
- . or_else ( || std:: env:: var ( "SYSROOT" ) . ok ( ) . map ( PathBuf :: from) )
322
- . or_else ( || {
323
- let home = std:: env:: var ( "RUSTUP_HOME" )
324
- . or_else ( |_| std:: env:: var ( "MULTIRUST_HOME" ) )
325
- . ok ( ) ;
326
- let toolchain = std:: env:: var ( "RUSTUP_TOOLCHAIN" )
327
- . or_else ( |_| std:: env:: var ( "MULTIRUST_TOOLCHAIN" ) )
328
- . ok ( ) ;
329
- toolchain_path ( home, toolchain)
330
- } )
331
- . or_else ( || {
332
- Command :: new ( "rustc" )
333
- . arg ( "--print" )
334
- . arg ( "sysroot" )
335
- . output ( )
336
- . ok ( )
337
- . and_then ( |out| String :: from_utf8 ( out. stdout ) . ok ( ) )
338
- . map ( |s| PathBuf :: from ( s. trim ( ) ) )
339
- } )
340
- . or_else ( || option_env ! ( "SYSROOT" ) . map ( PathBuf :: from) )
341
- . or_else ( || {
342
- let home = option_env ! ( "RUSTUP_HOME" )
343
- . or ( option_env ! ( "MULTIRUST_HOME" ) )
344
- . map ( ToString :: to_string) ;
345
- let toolchain = option_env ! ( "RUSTUP_TOOLCHAIN" )
346
- . or ( option_env ! ( "MULTIRUST_TOOLCHAIN" ) )
347
- . map ( ToString :: to_string) ;
348
- toolchain_path ( home, toolchain)
349
- } )
350
- . map ( |pb| pb. to_string_lossy ( ) . to_string ( ) )
351
- . expect ( "need to specify SYSROOT env var during clippy compilation, or use rustup or multirust" ) ;
352
-
353
- // Setting RUSTC_WRAPPER causes Cargo to pass 'rustc' as the first argument.
354
- // We're invoking the compiler programmatically, so we ignore this/
355
- let wrapper_mode = orig_args. get ( 1 ) . map ( Path :: new) . and_then ( Path :: file_stem) == Some ( "rustc" . as_ref ( ) ) ;
356
-
357
- if wrapper_mode {
358
- // we still want to be able to invoke it normally though
359
- orig_args. remove ( 1 ) ;
360
- }
301
+ if orig_args. iter ( ) . any ( |a| a == "--version" || a == "-V" ) {
302
+ let version_info = rustc_tools_util:: get_version_info!( ) ;
303
+ println ! ( "{}" , version_info) ;
304
+ exit ( 0 ) ;
305
+ }
361
306
362
- if !wrapper_mode && ( orig_args. iter ( ) . any ( |a| a == "--help" || a == "-h" ) || orig_args. len ( ) == 1 ) {
363
- display_help ( ) ;
364
- exit ( 0 ) ;
365
- }
307
+ // Get the sysroot, looking from most specific to this invocation to the least:
308
+ // - command line
309
+ // - runtime environment
310
+ // - SYSROOT
311
+ // - RUSTUP_HOME, MULTIRUST_HOME, RUSTUP_TOOLCHAIN, MULTIRUST_TOOLCHAIN
312
+ // - sysroot from rustc in the path
313
+ // - compile-time environment
314
+ // - SYSROOT
315
+ // - RUSTUP_HOME, MULTIRUST_HOME, RUSTUP_TOOLCHAIN, MULTIRUST_TOOLCHAIN
316
+ let sys_root_arg = arg_value ( & orig_args, "--sysroot" , |_| true ) ;
317
+ let have_sys_root_arg = sys_root_arg. is_some ( ) ;
318
+ let sys_root = sys_root_arg
319
+ . map ( PathBuf :: from)
320
+ . or_else ( || std:: env:: var ( "SYSROOT" ) . ok ( ) . map ( PathBuf :: from) )
321
+ . or_else ( || {
322
+ let home = std:: env:: var ( "RUSTUP_HOME" )
323
+ . or_else ( |_| std:: env:: var ( "MULTIRUST_HOME" ) )
324
+ . ok ( ) ;
325
+ let toolchain = std:: env:: var ( "RUSTUP_TOOLCHAIN" )
326
+ . or_else ( |_| std:: env:: var ( "MULTIRUST_TOOLCHAIN" ) )
327
+ . ok ( ) ;
328
+ toolchain_path ( home, toolchain)
329
+ } )
330
+ . or_else ( || {
331
+ Command :: new ( "rustc" )
332
+ . arg ( "--print" )
333
+ . arg ( "sysroot" )
334
+ . output ( )
335
+ . ok ( )
336
+ . and_then ( |out| String :: from_utf8 ( out. stdout ) . ok ( ) )
337
+ . map ( |s| PathBuf :: from ( s. trim ( ) ) )
338
+ } )
339
+ . or_else ( || option_env ! ( "SYSROOT" ) . map ( PathBuf :: from) )
340
+ . or_else ( || {
341
+ let home = option_env ! ( "RUSTUP_HOME" )
342
+ . or ( option_env ! ( "MULTIRUST_HOME" ) )
343
+ . map ( ToString :: to_string) ;
344
+ let toolchain = option_env ! ( "RUSTUP_TOOLCHAIN" )
345
+ . or ( option_env ! ( "MULTIRUST_TOOLCHAIN" ) )
346
+ . map ( ToString :: to_string) ;
347
+ toolchain_path ( home, toolchain)
348
+ } )
349
+ . map ( |pb| pb. to_string_lossy ( ) . to_string ( ) )
350
+ . expect ( "need to specify SYSROOT env var during clippy compilation, or use rustup or multirust" ) ;
366
351
367
- let should_describe_lints = || {
368
- let args: Vec < _ > = env:: args ( ) . collect ( ) ;
369
- args. windows ( 2 ) . any ( |args| {
370
- args[ 1 ] == "help"
371
- && match args[ 0 ] . as_str ( ) {
372
- "-W" | "-A" | "-D" | "-F" => true ,
373
- _ => false ,
374
- }
375
- } )
376
- } ;
377
-
378
- if !wrapper_mode && should_describe_lints ( ) {
379
- describe_lints ( ) ;
380
- exit ( 0 ) ;
381
- }
352
+ // Setting RUSTC_WRAPPER causes Cargo to pass 'rustc' as the first argument.
353
+ // We're invoking the compiler programmatically, so we ignore this/
354
+ let wrapper_mode = orig_args. get ( 1 ) . map ( Path :: new) . and_then ( Path :: file_stem) == Some ( "rustc" . as_ref ( ) ) ;
355
+
356
+ if wrapper_mode {
357
+ // we still want to be able to invoke it normally though
358
+ orig_args. remove ( 1 ) ;
359
+ }
360
+
361
+ if !wrapper_mode && ( orig_args. iter ( ) . any ( |a| a == "--help" || a == "-h" ) || orig_args. len ( ) == 1 ) {
362
+ display_help ( ) ;
363
+ exit ( 0 ) ;
364
+ }
365
+
366
+ let should_describe_lints = || {
367
+ let args: Vec < _ > = env:: args ( ) . collect ( ) ;
368
+ args. windows ( 2 ) . any ( |args| {
369
+ args[ 1 ] == "help"
370
+ && match args[ 0 ] . as_str ( ) {
371
+ "-W" | "-A" | "-D" | "-F" => true ,
372
+ _ => false ,
373
+ }
374
+ } )
375
+ } ;
382
376
383
- // this conditional check for the --sysroot flag is there so users can call
384
- // `clippy_driver` directly
385
- // without having to pass --sysroot or anything
386
- let mut args: Vec < String > = orig_args. clone ( ) ;
387
- if !have_sys_root_arg {
388
- args. extend ( vec ! [ "--sysroot" . into( ) , sys_root] ) ;
389
- } ;
390
-
391
- // this check ensures that dependencies are built but not linted and the final
392
- // crate is linted but not built
393
- let clippy_enabled = env:: var ( "CLIPPY_TESTS" ) . map_or ( false , |val| val == "true" )
394
- || arg_value ( & orig_args, "--cap-lints" , |val| val == "allow" ) . is_none ( ) ;
395
-
396
- if clippy_enabled {
397
- args. extend ( vec ! [ "--cfg" . into( ) , r#"feature="cargo-clippy""# . into( ) ] ) ;
398
- if let Ok ( extra_args) = env:: var ( "CLIPPY_ARGS" ) {
399
- args. extend ( extra_args. split ( "__CLIPPY_HACKERY__" ) . filter_map ( |s| {
400
- if s. is_empty ( ) {
401
- None
402
- } else {
403
- Some ( s. to_string ( ) )
404
- }
405
- } ) ) ;
406
- }
377
+ if !wrapper_mode && should_describe_lints ( ) {
378
+ describe_lints ( ) ;
379
+ exit ( 0 ) ;
380
+ }
381
+
382
+ // this conditional check for the --sysroot flag is there so users can call
383
+ // `clippy_driver` directly
384
+ // without having to pass --sysroot or anything
385
+ let mut args: Vec < String > = orig_args. clone ( ) ;
386
+ if !have_sys_root_arg {
387
+ args. extend ( vec ! [ "--sysroot" . into( ) , sys_root] ) ;
388
+ } ;
389
+
390
+ // this check ensures that dependencies are built but not linted and the final
391
+ // crate is linted but not built
392
+ let clippy_enabled = env:: var ( "CLIPPY_TESTS" ) . map_or ( false , |val| val == "true" )
393
+ || arg_value ( & orig_args, "--cap-lints" , |val| val == "allow" ) . is_none ( ) ;
394
+
395
+ if clippy_enabled {
396
+ args. extend ( vec ! [ "--cfg" . into( ) , r#"feature="cargo-clippy""# . into( ) ] ) ;
397
+ if let Ok ( extra_args) = env:: var ( "CLIPPY_ARGS" ) {
398
+ args. extend ( extra_args. split ( "__CLIPPY_HACKERY__" ) . filter_map ( |s| {
399
+ if s. is_empty ( ) {
400
+ None
401
+ } else {
402
+ Some ( s. to_string ( ) )
403
+ }
404
+ } ) ) ;
407
405
}
408
- let mut clippy = ClippyCallbacks ;
409
- let mut default = DefaultCallbacks ;
410
- let callbacks: & mut ( dyn rustc_driver:: Callbacks + Send ) =
411
- if clippy_enabled { & mut clippy } else { & mut default } ;
412
- rustc_driver:: run_compiler ( & args, callbacks, None , None )
413
- } )
414
- . and_then ( |result| result)
415
- . is_err ( ) as i32 ,
416
- )
406
+ }
407
+ let mut clippy = ClippyCallbacks ;
408
+ let mut default = DefaultCallbacks ;
409
+ let callbacks: & mut ( dyn rustc_driver:: Callbacks + Send ) =
410
+ if clippy_enabled { & mut clippy } else { & mut default } ;
411
+ rustc_driver:: run_compiler ( & args, callbacks, None , None )
412
+ } ) )
417
413
}
0 commit comments