@@ -11,6 +11,16 @@ use crate::core::config::TargetSelection;
11
11
use crate :: { Compiler , Mode , Subcommand } ;
12
12
use std:: path:: { Path , PathBuf } ;
13
13
14
+ pub fn cargo_subcommand ( kind : Kind ) -> & ' static str {
15
+ match kind {
16
+ Kind :: Check
17
+ // We ensure check steps for both std and rustc from build_steps/clippy, so handle `Kind::Clippy` as well.
18
+ | Kind :: Clippy => "check" ,
19
+ Kind :: Fix => "fix" ,
20
+ _ => unreachable ! ( ) ,
21
+ }
22
+ }
23
+
14
24
#[ derive( Debug , Clone , PartialEq , Eq , Hash ) ]
15
25
pub struct Std {
16
26
pub target : TargetSelection ,
@@ -22,97 +32,6 @@ pub struct Std {
22
32
crates : Vec < String > ,
23
33
}
24
34
25
- /// Returns args for the subcommand itself (not for cargo)
26
- fn args ( builder : & Builder < ' _ > ) -> Vec < String > {
27
- fn strings < ' a > ( arr : & ' a [ & str ] ) -> impl Iterator < Item = String > + ' a {
28
- arr. iter ( ) . copied ( ) . map ( String :: from)
29
- }
30
-
31
- if let Subcommand :: Clippy { fix, allow_dirty, allow_staged, allow, deny, warn, forbid } =
32
- & builder. config . cmd
33
- {
34
- // disable the most spammy clippy lints
35
- let ignored_lints = [
36
- "many_single_char_names" , // there are a lot in stdarch
37
- "collapsible_if" ,
38
- "type_complexity" ,
39
- "missing_safety_doc" , // almost 3K warnings
40
- "too_many_arguments" ,
41
- "needless_lifetimes" , // people want to keep the lifetimes
42
- "wrong_self_convention" ,
43
- ] ;
44
- let mut args = vec ! [ ] ;
45
- if * fix {
46
- #[ rustfmt:: skip]
47
- args. extend ( strings ( & [
48
- "--fix" , "-Zunstable-options" ,
49
- // FIXME: currently, `--fix` gives an error while checking tests for libtest,
50
- // possibly because libtest is not yet built in the sysroot.
51
- // As a workaround, avoid checking tests and benches when passed --fix.
52
- "--lib" , "--bins" , "--examples" ,
53
- ] ) ) ;
54
-
55
- if * allow_dirty {
56
- args. push ( "--allow-dirty" . to_owned ( ) ) ;
57
- }
58
-
59
- if * allow_staged {
60
- args. push ( "--allow-staged" . to_owned ( ) ) ;
61
- }
62
- }
63
-
64
- args. extend ( strings ( & [ "--" ] ) ) ;
65
-
66
- if deny. is_empty ( ) && forbid. is_empty ( ) {
67
- args. extend ( strings ( & [ "--cap-lints" , "warn" ] ) ) ;
68
- }
69
-
70
- let all_args = std:: env:: args ( ) . collect :: < Vec < _ > > ( ) ;
71
- args. extend ( get_clippy_rules_in_order ( & all_args, allow, deny, warn, forbid) ) ;
72
-
73
- args. extend ( ignored_lints. iter ( ) . map ( |lint| format ! ( "-Aclippy::{}" , lint) ) ) ;
74
- args. extend ( builder. config . free_args . clone ( ) ) ;
75
- args
76
- } else {
77
- builder. config . free_args . clone ( )
78
- }
79
- }
80
-
81
- /// We need to keep the order of the given clippy lint rules before passing them.
82
- /// Since clap doesn't offer any useful interface for this purpose out of the box,
83
- /// we have to handle it manually.
84
- pub ( crate ) fn get_clippy_rules_in_order (
85
- all_args : & [ String ] ,
86
- allow_rules : & [ String ] ,
87
- deny_rules : & [ String ] ,
88
- warn_rules : & [ String ] ,
89
- forbid_rules : & [ String ] ,
90
- ) -> Vec < String > {
91
- let mut result = vec ! [ ] ;
92
-
93
- for ( prefix, item) in
94
- [ ( "-A" , allow_rules) , ( "-D" , deny_rules) , ( "-W" , warn_rules) , ( "-F" , forbid_rules) ]
95
- {
96
- item. iter ( ) . for_each ( |v| {
97
- let rule = format ! ( "{prefix}{v}" ) ;
98
- let position = all_args. iter ( ) . position ( |t| t == & rule) . unwrap ( ) ;
99
- result. push ( ( position, rule) ) ;
100
- } ) ;
101
- }
102
-
103
- result. sort_by_key ( |& ( position, _) | position) ;
104
- result. into_iter ( ) . map ( |v| v. 1 ) . collect ( )
105
- }
106
-
107
- fn cargo_subcommand ( kind : Kind ) -> & ' static str {
108
- match kind {
109
- Kind :: Check => "check" ,
110
- Kind :: Clippy => "clippy" ,
111
- Kind :: Fix => "fix" ,
112
- _ => unreachable ! ( ) ,
113
- }
114
- }
115
-
116
35
impl Std {
117
36
pub fn new ( target : TargetSelection ) -> Self {
118
37
Self { target, crates : vec ! [ ] }
@@ -164,7 +83,7 @@ impl Step for Std {
164
83
run_cargo (
165
84
builder,
166
85
cargo,
167
- args ( builder) ,
86
+ builder. config . free_args . clone ( ) ,
168
87
& libstd_stamp ( builder, compiler, target) ,
169
88
vec ! [ ] ,
170
89
true ,
@@ -221,7 +140,7 @@ impl Step for Std {
221
140
run_cargo (
222
141
builder,
223
142
cargo,
224
- args ( builder) ,
143
+ builder. config . free_args . clone ( ) ,
225
144
& libstd_test_stamp ( builder, compiler, target) ,
226
145
vec ! [ ] ,
227
146
true ,
@@ -318,7 +237,7 @@ impl Step for Rustc {
318
237
run_cargo (
319
238
builder,
320
239
cargo,
321
- args ( builder) ,
240
+ builder. config . free_args . clone ( ) ,
322
241
& librustc_stamp ( builder, compiler, target) ,
323
242
vec ! [ ] ,
324
243
true ,
@@ -384,7 +303,7 @@ impl Step for CodegenBackend {
384
303
run_cargo (
385
304
builder,
386
305
cargo,
387
- args ( builder) ,
306
+ builder. config . free_args . clone ( ) ,
388
307
& codegen_backend_stamp ( builder, compiler, target, backend) ,
389
308
vec ! [ ] ,
390
309
true ,
@@ -450,7 +369,7 @@ impl Step for RustAnalyzer {
450
369
run_cargo (
451
370
builder,
452
371
cargo,
453
- args ( builder) ,
372
+ builder. config . free_args . clone ( ) ,
454
373
& stamp ( builder, compiler, target) ,
455
374
vec ! [ ] ,
456
375
true ,
@@ -513,7 +432,7 @@ macro_rules! tool_check_step {
513
432
run_cargo(
514
433
builder,
515
434
cargo,
516
- args ( builder) ,
435
+ builder. config . free_args . clone ( ) ,
517
436
& stamp( builder, compiler, target) ,
518
437
vec![ ] ,
519
438
true ,
0 commit comments