diff options
Diffstat (limited to 'support/texlab/crates/commands/src/dep_graph.rs')
-rw-r--r-- | support/texlab/crates/commands/src/dep_graph.rs | 31 |
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}\"];")?; } |