@@ -34,6 +34,14 @@ pub(crate) struct CargoOptions {
3434 pub ( crate ) target_dir : Option < Utf8PathBuf > ,
3535}
3636
37+ #[ derive( Clone ) ]
38+ pub ( crate ) enum Target {
39+ Bin ( String ) ,
40+ Example ( String ) ,
41+ Benchmark ( String ) ,
42+ Test ( String ) ,
43+ }
44+
3745impl CargoOptions {
3846 pub ( crate ) fn apply_on_command ( & self , cmd : & mut Command ) {
3947 for target in & self . target_triples {
@@ -119,13 +127,13 @@ impl FlycheckHandle {
119127
120128 /// Schedule a re-start of the cargo check worker to do a workspace wide check.
121129 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 ( ) ;
123131 }
124132
125133 /// 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 > ) {
127135 self . sender
128- . send ( StateChange :: Restart { package : Some ( package) , saved_file : None } )
136+ . send ( StateChange :: Restart { package : Some ( package) , saved_file : None , target } )
129137 . unwrap ( ) ;
130138 }
131139
@@ -183,7 +191,7 @@ pub(crate) enum Progress {
183191}
184192
185193enum StateChange {
186- Restart { package : Option < String > , saved_file : Option < AbsPathBuf > } ,
194+ Restart { package : Option < String > , saved_file : Option < AbsPathBuf > , target : Option < Target > } ,
187195 Cancel ,
188196}
189197
@@ -271,7 +279,7 @@ impl FlycheckActor {
271279 tracing:: debug!( flycheck_id = self . id, "flycheck cancelled" ) ;
272280 self . cancel_check_process ( ) ;
273281 }
274- Event :: RequestStateChange ( StateChange :: Restart { package, saved_file } ) => {
282+ Event :: RequestStateChange ( StateChange :: Restart { package, saved_file, target } ) => {
275283 // Cancel the previously spawned process
276284 self . cancel_check_process ( ) ;
277285 while let Ok ( restart) = inbox. recv_timeout ( Duration :: from_millis ( 50 ) ) {
@@ -281,11 +289,12 @@ impl FlycheckActor {
281289 }
282290 }
283291
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+
289298 let formatted_command = format ! ( "{command:?}" ) ;
290299
291300 tracing:: debug!( ?command, "will restart flycheck" ) ;
@@ -381,6 +390,7 @@ impl FlycheckActor {
381390 & self ,
382391 package : Option < & str > ,
383392 saved_file : Option < & AbsPath > ,
393+ target : Option < Target > ,
384394 ) -> Option < Command > {
385395 match & self . config {
386396 FlycheckConfig :: CargoCommand { command, options, ansi_color_output } => {
@@ -396,6 +406,15 @@ impl FlycheckActor {
396406 None => cmd. arg ( "--workspace" ) ,
397407 } ;
398408
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+
399418 cmd. arg ( if * ansi_color_output {
400419 "--message-format=json-diagnostic-rendered-ansi"
401420 } else {
0 commit comments