11//! Flycheck provides the functionality needed to run `cargo check` to provide
22//! LSP diagnostics based on the output of the command.
33
4- use std:: { fmt, io, mem, process:: Command , sync :: Arc , time:: Duration } ;
4+ use std:: { fmt, io, mem, process:: Command , time:: Duration } ;
55
66use cargo_metadata:: PackageId ;
77use crossbeam_channel:: { select_biased, unbounded, Receiver , Sender } ;
@@ -13,6 +13,7 @@ pub(crate) use cargo_metadata::diagnostic::{
1313 Applicability , Diagnostic , DiagnosticCode , DiagnosticLevel , DiagnosticSpan ,
1414} ;
1515use toolchain:: Tool ;
16+ use triomphe:: Arc ;
1617
1718use crate :: command:: { CommandHandle , ParseFromLine } ;
1819
@@ -155,14 +156,14 @@ pub(crate) enum FlycheckMessage {
155156 id : usize ,
156157 workspace_root : Arc < AbsPathBuf > ,
157158 diagnostic : Diagnostic ,
158- package_id : Option < PackageId > ,
159+ package_id : Option < Arc < PackageId > > ,
159160 } ,
160161
161162 /// Request clearing all outdated diagnostics.
162163 ClearDiagnostics {
163164 id : usize ,
164165 /// The package whose diagnostics to clear, or if unspecified, all diagnostics.
165- package_id : Option < PackageId > ,
166+ package_id : Option < Arc < PackageId > > ,
166167 } ,
167168
168169 /// Request check progress notification to client
@@ -229,7 +230,7 @@ struct FlycheckActor {
229230 command_handle : Option < CommandHandle < CargoCheckMessage > > ,
230231 /// The receiver side of the channel mentioned above.
231232 command_receiver : Option < Receiver < CargoCheckMessage > > ,
232- package_status : FxHashMap < PackageId , DiagnosticReceived > ,
233+ package_status : FxHashMap < Arc < PackageId > , DiagnosticReceived > ,
233234}
234235
235236#[ derive( PartialEq , Eq , Copy , Clone , Debug ) ]
@@ -370,7 +371,9 @@ impl FlycheckActor {
370371 "artifact received"
371372 ) ;
372373 self . report_progress ( Progress :: DidCheckCrate ( msg. target . name ) ) ;
373- self . package_status . entry ( msg. package_id ) . or_insert ( DiagnosticReceived :: No ) ;
374+ self . package_status
375+ . entry ( Arc :: new ( msg. package_id ) )
376+ . or_insert ( DiagnosticReceived :: No ) ;
374377 }
375378 CargoCheckMessage :: Diagnostic { diagnostic, package_id } => {
376379 tracing:: trace!(
@@ -517,7 +520,7 @@ impl FlycheckActor {
517520#[ allow( clippy:: large_enum_variant) ]
518521enum CargoCheckMessage {
519522 CompilerArtifact ( cargo_metadata:: Artifact ) ,
520- Diagnostic { diagnostic : Diagnostic , package_id : Option < PackageId > } ,
523+ Diagnostic { diagnostic : Diagnostic , package_id : Option < Arc < PackageId > > } ,
521524}
522525
523526impl ParseFromLine for CargoCheckMessage {
@@ -534,7 +537,7 @@ impl ParseFromLine for CargoCheckMessage {
534537 cargo_metadata:: Message :: CompilerMessage ( msg) => {
535538 Some ( CargoCheckMessage :: Diagnostic {
536539 diagnostic : msg. message ,
537- package_id : Some ( msg. package_id ) ,
540+ package_id : Some ( Arc :: new ( msg. package_id ) ) ,
538541 } )
539542 }
540543 _ => None ,
0 commit comments