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 ) ]
@@ -373,7 +374,7 @@ impl FlycheckActor {
373
374
assert_eq ! (
374
375
* self
375
376
. package_status
376
- . entry( msg. package_id)
377
+ . entry( Arc :: new ( msg. package_id) )
377
378
. or_insert( DiagnosticReceived :: No ) ,
378
379
DiagnosticReceived :: No
379
380
) ;
@@ -523,7 +524,7 @@ impl FlycheckActor {
523
524
#[ allow( clippy:: large_enum_variant) ]
524
525
enum CargoCheckMessage {
525
526
CompilerArtifact ( cargo_metadata:: Artifact ) ,
526
- Diagnostic { diagnostic : Diagnostic , package_id : Option < PackageId > } ,
527
+ Diagnostic { diagnostic : Diagnostic , package_id : Option < Arc < PackageId > > } ,
527
528
}
528
529
529
530
impl ParseFromLine for CargoCheckMessage {
@@ -540,7 +541,7 @@ impl ParseFromLine for CargoCheckMessage {
540
541
cargo_metadata:: Message :: CompilerMessage ( msg) => {
541
542
Some ( CargoCheckMessage :: Diagnostic {
542
543
diagnostic : msg. message ,
543
- package_id : Some ( msg. package_id ) ,
544
+ package_id : Some ( Arc :: new ( msg. package_id ) ) ,
544
545
} )
545
546
}
546
547
_ => None ,
0 commit comments