@@ -11,6 +11,14 @@ 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 | Kind :: Clippy => "check" ,
17
+ Kind :: Fix => "fix" ,
18
+ _ => unreachable ! ( ) ,
19
+ }
20
+ }
21
+
14
22
#[ derive( Debug , Clone , PartialEq , Eq , Hash ) ]
15
23
pub struct Std {
16
24
pub target : TargetSelection ,
@@ -22,97 +30,6 @@ pub struct Std {
22
30
crates : Vec < String > ,
23
31
}
24
32
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
33
impl Std {
117
34
pub fn new ( target : TargetSelection ) -> Self {
118
35
Self { target, crates : vec ! [ ] }
@@ -164,7 +81,7 @@ impl Step for Std {
164
81
run_cargo (
165
82
builder,
166
83
cargo,
167
- args ( builder) ,
84
+ builder. config . free_args . clone ( ) ,
168
85
& libstd_stamp ( builder, compiler, target) ,
169
86
vec ! [ ] ,
170
87
true ,
@@ -221,7 +138,7 @@ impl Step for Std {
221
138
run_cargo (
222
139
builder,
223
140
cargo,
224
- args ( builder) ,
141
+ builder. config . free_args . clone ( ) ,
225
142
& libstd_test_stamp ( builder, compiler, target) ,
226
143
vec ! [ ] ,
227
144
true ,
@@ -318,7 +235,7 @@ impl Step for Rustc {
318
235
run_cargo (
319
236
builder,
320
237
cargo,
321
- args ( builder) ,
238
+ builder. config . free_args . clone ( ) ,
322
239
& librustc_stamp ( builder, compiler, target) ,
323
240
vec ! [ ] ,
324
241
true ,
@@ -384,7 +301,7 @@ impl Step for CodegenBackend {
384
301
run_cargo (
385
302
builder,
386
303
cargo,
387
- args ( builder) ,
304
+ builder. config . free_args . clone ( ) ,
388
305
& codegen_backend_stamp ( builder, compiler, target, backend) ,
389
306
vec ! [ ] ,
390
307
true ,
@@ -450,7 +367,7 @@ impl Step for RustAnalyzer {
450
367
run_cargo (
451
368
builder,
452
369
cargo,
453
- args ( builder) ,
370
+ builder. config . free_args . clone ( ) ,
454
371
& stamp ( builder, compiler, target) ,
455
372
vec ! [ ] ,
456
373
true ,
@@ -513,7 +430,7 @@ macro_rules! tool_check_step {
513
430
run_cargo(
514
431
builder,
515
432
cargo,
516
- args ( builder) ,
433
+ builder. config . free_args . clone ( ) ,
517
434
& stamp( builder, compiler, target) ,
518
435
vec![ ] ,
519
436
true ,
0 commit comments