From f3c009d653c5ec33f41115bbca095b718eb97f2c Mon Sep 17 00:00:00 2001 From: Chadtech Date: Sun, 1 Aug 2021 14:14:21 -0400 Subject: [PATCH] Filter side nav items by what the module exposes --- docs/src/lib.rs | 49 +++++++++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/docs/src/lib.rs b/docs/src/lib.rs index 6ed02513c0..5634f7fd33 100644 --- a/docs/src/lib.rs +++ b/docs/src/lib.rs @@ -52,12 +52,17 @@ pub fn generate(filenames: Vec, std_lib: StdLib, build_dir: &Path) { let template_html = include_str!("./static/index.html").replace( "", - render_sidebar( - package - .modules - .iter() - .flat_map(|loaded_module| loaded_module.documentation.values()), - ) + render_sidebar(package.modules.iter().flat_map(|loaded_module| { + loaded_module.documentation.values().map(move |d| { + let exposed_values = loaded_module + .exposed_values + .iter() + .map(|symbol| symbol.ident_string(&loaded_module.interns).to_string()) + .collect::>(); + + (exposed_values, d) + }) + })) .as_str(), ); @@ -237,10 +242,12 @@ fn render_name_and_version(name: &str, version: &str) -> String { buf } -fn render_sidebar<'a, I: Iterator>(modules: I) -> String { +fn render_sidebar<'a, I: Iterator, &'a ModuleDocumentation)>>( + modules: I, +) -> String { let mut buf = String::new(); - for module in modules { + for (exposed_values, module) in modules { let mut sidebar_entry_content = String::new(); let name = module.name.as_str(); @@ -266,20 +273,22 @@ fn render_sidebar<'a, I: Iterator>(modules: I) - for entry in &module.entries { if let DocEntry::DocDef(doc_def) = entry { - let mut entry_href = String::new(); + if exposed_values.contains(&doc_def.name) { + let mut entry_href = String::new(); - entry_href.push_str(href.as_str()); - entry_href.push('#'); - entry_href.push_str(doc_def.name.as_str()); + entry_href.push_str(href.as_str()); + entry_href.push('#'); + entry_href.push_str(doc_def.name.as_str()); - entries_buf.push_str( - html_node( - "a", - vec![("href", entry_href.as_str())], - doc_def.name.as_str(), - ) - .as_str(), - ); + entries_buf.push_str( + html_node( + "a", + vec![("href", entry_href.as_str())], + doc_def.name.as_str(), + ) + .as_str(), + ); + } } }