summaryrefslogtreecommitdiff
path: root/support/texlab/crates/commands/src/dep_graph.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/crates/commands/src/dep_graph.rs')
-rw-r--r--support/texlab/crates/commands/src/dep_graph.rs31
1 files changed, 16 insertions, 15 deletions
diff --git a/support/texlab/crates/commands/src/dep_graph.rs b/support/texlab/crates/commands/src/dep_graph.rs
index 1388756ddf..fe9ff3829c 100644
--- a/support/texlab/crates/commands/src/dep_graph.rs
+++ b/support/texlab/crates/commands/src/dep_graph.rs
@@ -1,22 +1,20 @@
use std::io::Write;
use anyhow::Result;
-use base_db::{graph, Document, Workspace};
+use base_db::Workspace;
use itertools::Itertools;
use rustc_hash::FxHashMap;
pub fn show_dependency_graph(workspace: &Workspace) -> Result<String> {
- let documents = workspace
- .iter()
- .enumerate()
- .map(|(i, doc)| (doc, format!("v{i:0>5}")))
- .collect::<FxHashMap<&Document, String>>();
+ let mut documents = FxHashMap::default();
let mut writer = Vec::new();
writeln!(&mut writer, "digraph G {{")?;
writeln!(&mut writer, "rankdir = LR;")?;
- for (document, node) in &documents {
+ for (i, document) in workspace.iter().enumerate() {
+ let node = format!("v{i:0>5}");
+
let label = document.uri.as_str();
let shape = if document
.data
@@ -35,19 +33,22 @@ pub fn show_dependency_graph(workspace: &Workspace) -> Result<String> {
};
writeln!(&mut writer, "\t{node} [label=\"{label}\", shape={shape}];")?;
+ documents.insert(&document.uri, node);
}
for edge in workspace
- .iter()
- .flat_map(|start| graph::Graph::new(workspace, start).edges)
+ .graphs()
+ .values()
+ .flat_map(|graph| &graph.edges)
.unique()
{
- let source = &documents[edge.source];
- let target = &documents[edge.target];
- let label = edge
- .weight
- .as_ref()
- .map_or("<artifact>", |weight| &weight.link.path.text);
+ let source = &documents[&edge.source];
+ let target = &documents[&edge.target];
+ let label = match &edge.data {
+ base_db::deps::EdgeData::DirectLink(data) => &data.link.path.text,
+ base_db::deps::EdgeData::AdditionalFiles => "<project>",
+ base_db::deps::EdgeData::Artifact => "<artifact>",
+ };
writeln!(&mut writer, "\t{source} -> {target} [label=\"{label}\"];")?;
}