Unnamed repository; edit this file 'description' to name the repository.
Preserve order when grouping references.
Kyle Huey 2022-03-23
parent 0583919 · commit af1aa86
-rw-r--r--crates/rust-analyzer/src/cli/lsif.rs27
1 files changed, 16 insertions, 11 deletions
diff --git a/crates/rust-analyzer/src/cli/lsif.rs b/crates/rust-analyzer/src/cli/lsif.rs
index 188f9b1380..5e6d286987 100644
--- a/crates/rust-analyzer/src/cli/lsif.rs
+++ b/crates/rust-analyzer/src/cli/lsif.rs
@@ -212,7 +212,7 @@ impl LsifManager<'_> {
in_v: result_id.into(),
out_v: result_set_id.into(),
}));
- let edges = token.references.iter().fold(
+ let mut edges = token.references.iter().fold(
HashMap::<_, Vec<lsp_types::NumberOrString>>::new(),
|mut edges, x| {
let entry =
@@ -221,16 +221,21 @@ impl LsifManager<'_> {
edges
},
);
- for ((file_id, is_definition), vertices) in edges.into_iter() {
- self.add_edge(lsif::Edge::Item(lsif::Item {
- document: (*self.file_map.get(&file_id).unwrap()).into(),
- property: Some(if is_definition {
- lsif::ItemKind::Definitions
- } else {
- lsif::ItemKind::References
- }),
- edge_data: lsif::EdgeDataMultiIn { in_vs: vertices, out_v: result_id.into() },
- }));
+ for x in token.references {
+ if let Some(vertices) = edges.remove(&(x.range.file_id, x.is_definition)) {
+ self.add_edge(lsif::Edge::Item(lsif::Item {
+ document: (*self.file_map.get(&x.range.file_id).unwrap()).into(),
+ property: Some(if x.is_definition {
+ lsif::ItemKind::Definitions
+ } else {
+ lsif::ItemKind::References
+ }),
+ edge_data: lsif::EdgeDataMultiIn {
+ in_vs: vertices,
+ out_v: result_id.into(),
+ },
+ }));
+ }
}
}
}