mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-29 05:15:04 +00:00
Merge #11793
11793: LSIF: consolidate references into a single edge where possible. r=Veykril a=khuey Co-authored-by: Kyle Huey <khuey@kylehuey.com>
This commit is contained in:
commit
e30747dfa8
1 changed files with 23 additions and 13 deletions
|
@ -212,20 +212,30 @@ impl LsifManager<'_> {
|
||||||
in_v: result_id.into(),
|
in_v: result_id.into(),
|
||||||
out_v: result_set_id.into(),
|
out_v: result_set_id.into(),
|
||||||
}));
|
}));
|
||||||
|
let mut edges = token.references.iter().fold(
|
||||||
|
HashMap::<_, Vec<lsp_types::NumberOrString>>::new(),
|
||||||
|
|mut edges, x| {
|
||||||
|
let entry =
|
||||||
|
edges.entry((x.range.file_id, x.is_definition)).or_insert_with(Vec::new);
|
||||||
|
entry.push((*self.range_map.get(&x.range).unwrap()).into());
|
||||||
|
edges
|
||||||
|
},
|
||||||
|
);
|
||||||
for x in token.references {
|
for x in token.references {
|
||||||
let vertex = *self.range_map.get(&x.range).unwrap();
|
if let Some(vertices) = edges.remove(&(x.range.file_id, x.is_definition)) {
|
||||||
self.add_edge(lsif::Edge::Item(lsif::Item {
|
self.add_edge(lsif::Edge::Item(lsif::Item {
|
||||||
document: (*self.file_map.get(&x.range.file_id).unwrap()).into(),
|
document: (*self.file_map.get(&x.range.file_id).unwrap()).into(),
|
||||||
property: Some(if x.is_definition {
|
property: Some(if x.is_definition {
|
||||||
lsif::ItemKind::Definitions
|
lsif::ItemKind::Definitions
|
||||||
} else {
|
} else {
|
||||||
lsif::ItemKind::References
|
lsif::ItemKind::References
|
||||||
}),
|
}),
|
||||||
edge_data: lsif::EdgeDataMultiIn {
|
edge_data: lsif::EdgeDataMultiIn {
|
||||||
in_vs: vec![vertex.into()],
|
in_vs: vertices,
|
||||||
out_v: result_id.into(),
|
out_v: result_id.into(),
|
||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue