1
1
//! Flycheck provides the functionality needed to run `cargo check` to provide
2
2
//! LSP diagnostics based on the output of the command.
3
3
4
- use std:: { fmt, io, mem, process:: Command , sync :: Arc , time:: Duration } ;
4
+ use std:: { fmt, io, mem, process:: Command , time:: Duration } ;
5
5
6
6
use cargo_metadata:: PackageId ;
7
7
use crossbeam_channel:: { select_biased, unbounded, Receiver , Sender } ;
@@ -13,6 +13,7 @@ pub(crate) use cargo_metadata::diagnostic::{
13
13
Applicability , Diagnostic , DiagnosticCode , DiagnosticLevel , DiagnosticSpan ,
14
14
} ;
15
15
use toolchain:: Tool ;
16
+ use triomphe:: Arc ;
16
17
17
18
use crate :: command:: { CommandHandle , ParseFromLine } ;
18
19
@@ -155,14 +156,14 @@ pub(crate) enum FlycheckMessage {
155
156
id : usize ,
156
157
workspace_root : Arc < AbsPathBuf > ,
157
158
diagnostic : Diagnostic ,
158
- package_id : Option < PackageId > ,
159
+ package_id : Option < Arc < PackageId > > ,
159
160
} ,
160
161
161
162
/// Request clearing all outdated diagnostics.
162
163
ClearDiagnostics {
163
164
id : usize ,
164
165
/// The package whose diagnostics to clear, or if unspecified, all diagnostics.
165
- package_id : Option < PackageId > ,
166
+ package_id : Option < Arc < PackageId > > ,
166
167
} ,
167
168
168
169
/// Request check progress notification to client
@@ -229,7 +230,7 @@ struct FlycheckActor {
229
230
command_handle : Option < CommandHandle < CargoCheckMessage > > ,
230
231
/// The receiver side of the channel mentioned above.
231
232
command_receiver : Option < Receiver < CargoCheckMessage > > ,
232
- package_status : FxHashMap < PackageId , DiagnosticReceived > ,
233
+ package_status : FxHashMap < Arc < PackageId > , DiagnosticReceived > ,
233
234
}
234
235
235
236
#[ derive( PartialEq , Eq , Copy , Clone , Debug ) ]
@@ -370,7 +371,9 @@ impl FlycheckActor {
370
371
"artifact received"
371
372
) ;
372
373
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 ) ;
374
377
}
375
378
CargoCheckMessage :: Diagnostic { diagnostic, package_id } => {
376
379
tracing:: trace!(
@@ -517,7 +520,7 @@ impl FlycheckActor {
517
520
#[ allow( clippy:: large_enum_variant) ]
518
521
enum CargoCheckMessage {
519
522
CompilerArtifact ( cargo_metadata:: Artifact ) ,
520
- Diagnostic { diagnostic : Diagnostic , package_id : Option < PackageId > } ,
523
+ Diagnostic { diagnostic : Diagnostic , package_id : Option < Arc < PackageId > > } ,
521
524
}
522
525
523
526
impl ParseFromLine for CargoCheckMessage {
@@ -534,7 +537,7 @@ impl ParseFromLine for CargoCheckMessage {
534
537
cargo_metadata:: Message :: CompilerMessage ( msg) => {
535
538
Some ( CargoCheckMessage :: Diagnostic {
536
539
diagnostic : msg. message ,
537
- package_id : Some ( msg. package_id ) ,
540
+ package_id : Some ( Arc :: new ( msg. package_id ) ) ,
538
541
} )
539
542
}
540
543
_ => None ,
0 commit comments