@@ -34,6 +34,14 @@ pub(crate) struct CargoOptions {
34
34
pub ( crate ) target_dir : Option < Utf8PathBuf > ,
35
35
}
36
36
37
+ #[ derive( Clone ) ]
38
+ pub ( crate ) enum Target {
39
+ Bin ( String ) ,
40
+ Example ( String ) ,
41
+ Benchmark ( String ) ,
42
+ Test ( String ) ,
43
+ }
44
+
37
45
impl CargoOptions {
38
46
pub ( crate ) fn apply_on_command ( & self , cmd : & mut Command ) {
39
47
for target in & self . target_triples {
@@ -119,13 +127,13 @@ impl FlycheckHandle {
119
127
120
128
/// Schedule a re-start of the cargo check worker to do a workspace wide check.
121
129
pub ( crate ) fn restart_workspace ( & self , saved_file : Option < AbsPathBuf > ) {
122
- self . sender . send ( StateChange :: Restart { package : None , saved_file } ) . unwrap ( ) ;
130
+ self . sender . send ( StateChange :: Restart { package : None , saved_file, target : None } ) . unwrap ( ) ;
123
131
}
124
132
125
133
/// Schedule a re-start of the cargo check worker to do a package wide check.
126
- pub ( crate ) fn restart_for_package ( & self , package : String ) {
134
+ pub ( crate ) fn restart_for_package ( & self , package : String , target : Option < Target > ) {
127
135
self . sender
128
- . send ( StateChange :: Restart { package : Some ( package) , saved_file : None } )
136
+ . send ( StateChange :: Restart { package : Some ( package) , saved_file : None , target } )
129
137
. unwrap ( ) ;
130
138
}
131
139
@@ -183,7 +191,7 @@ pub(crate) enum Progress {
183
191
}
184
192
185
193
enum StateChange {
186
- Restart { package : Option < String > , saved_file : Option < AbsPathBuf > } ,
194
+ Restart { package : Option < String > , saved_file : Option < AbsPathBuf > , target : Option < Target > } ,
187
195
Cancel ,
188
196
}
189
197
@@ -271,7 +279,7 @@ impl FlycheckActor {
271
279
tracing:: debug!( flycheck_id = self . id, "flycheck cancelled" ) ;
272
280
self . cancel_check_process ( ) ;
273
281
}
274
- Event :: RequestStateChange ( StateChange :: Restart { package, saved_file } ) => {
282
+ Event :: RequestStateChange ( StateChange :: Restart { package, saved_file, target } ) => {
275
283
// Cancel the previously spawned process
276
284
self . cancel_check_process ( ) ;
277
285
while let Ok ( restart) = inbox. recv_timeout ( Duration :: from_millis ( 50 ) ) {
@@ -281,11 +289,12 @@ impl FlycheckActor {
281
289
}
282
290
}
283
291
284
- let command =
285
- match self . check_command ( package. as_deref ( ) , saved_file. as_deref ( ) ) {
286
- Some ( c) => c,
287
- None => continue ,
288
- } ;
292
+ let Some ( command) =
293
+ self . check_command ( package. as_deref ( ) , saved_file. as_deref ( ) , target)
294
+ else {
295
+ continue ;
296
+ } ;
297
+
289
298
let formatted_command = format ! ( "{command:?}" ) ;
290
299
291
300
tracing:: debug!( ?command, "will restart flycheck" ) ;
@@ -381,6 +390,7 @@ impl FlycheckActor {
381
390
& self ,
382
391
package : Option < & str > ,
383
392
saved_file : Option < & AbsPath > ,
393
+ target : Option < Target > ,
384
394
) -> Option < Command > {
385
395
match & self . config {
386
396
FlycheckConfig :: CargoCommand { command, options, ansi_color_output } => {
@@ -396,6 +406,15 @@ impl FlycheckActor {
396
406
None => cmd. arg ( "--workspace" ) ,
397
407
} ;
398
408
409
+ if let Some ( tgt) = target {
410
+ match tgt {
411
+ Target :: Bin ( tgt) => cmd. arg ( "--bin" ) . arg ( tgt) ,
412
+ Target :: Example ( tgt) => cmd. arg ( "--example" ) . arg ( tgt) ,
413
+ Target :: Test ( tgt) => cmd. arg ( "--test" ) . arg ( tgt) ,
414
+ Target :: Benchmark ( tgt) => cmd. arg ( "--bench" ) . arg ( tgt) ,
415
+ } ;
416
+ }
417
+
399
418
cmd. arg ( if * ansi_color_output {
400
419
"--message-format=json-diagnostic-rendered-ansi"
401
420
} else {
0 commit comments