llmwiki_tooling/cmd/
refs.rs1use crate::error::WikiError;
2use crate::link_index::LinkIndex;
3use crate::page::PageId;
4use crate::wiki::Wiki;
5
6pub fn refs_to(wiki: &Wiki, page_name: &str) -> Result<(), WikiError> {
8 let page_id = PageId::from(page_name);
9 let index = LinkIndex::build(wiki)?;
10
11 let mut sources = index.inbound(&page_id);
12 sources.sort();
13
14 for source in &sources {
15 if let Some(entry) = wiki.get(source) {
16 println!("{} -> {page_name}", entry.rel_path.display());
17 } else {
18 println!("{source} -> {page_name}");
19 }
20 }
21
22 if sources.is_empty() {
23 eprintln!("no inbound links to '{page_name}'");
24 }
25
26 Ok(())
27}
28
29pub fn refs_from(wiki: &Wiki, page_name: &str) -> Result<(), WikiError> {
31 let page_id = PageId::from(page_name);
32 let index = LinkIndex::build(wiki)?;
33
34 let outbound = index.outbound(&page_id);
35
36 let mut targets: Vec<&str> = outbound.iter().map(|wl| wl.page.as_str()).collect();
37 targets.sort();
38 targets.dedup();
39
40 for target in &targets {
41 println!("{page_name} -> {target}");
42 }
43
44 if targets.is_empty() {
45 eprintln!("no outbound links from '{page_name}'");
46 }
47
48 Ok(())
49}
50
51pub fn refs_graph(wiki: &Wiki) -> Result<(), WikiError> {
53 let index = LinkIndex::build(wiki)?;
54 let edges = index.all_edges();
55
56 for (source, target) in &edges {
57 println!("{source} -> {target}");
58 }
59
60 Ok(())
61}