From 89be091f8756525b53a10f63749eb7ff67b2a36d Mon Sep 17 00:00:00 2001 From: Richard Feldman Date: Sat, 18 Nov 2023 21:02:49 -0500 Subject: [PATCH] Order modules in docs sidebar based on `exposes` --- crates/compiler/load_internal/src/file.rs | 16 ++++++++++++++-- crates/compiler/load_internal/src/module.rs | 2 +- crates/docs/src/lib.rs | 8 ++++---- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/crates/compiler/load_internal/src/file.rs b/crates/compiler/load_internal/src/file.rs index 57386b45462..ea2af62253e 100644 --- a/crates/compiler/load_internal/src/file.rs +++ b/crates/compiler/load_internal/src/file.rs @@ -3291,7 +3291,7 @@ fn finish( exposed_types_storage: ExposedTypesStorageSubs, resolved_implementations: ResolvedImplementations, dep_idents: IdentIdsByModule, - documentation: VecMap, + mut documentation: VecMap, abilities_store: AbilitiesStore, // #[cfg(debug_assertions)] checkmate: Option, @@ -3330,6 +3330,18 @@ fn finish( roc_checkmate::dump_checkmate!(checkmate); + let mut docs_by_module = Vec::with_capacity(state.exposed_modules.len()); + + for module_id in state.exposed_modules.iter() { + let docs = documentation.remove(module_id).unwrap_or_else(|| { + panic!("A module was exposed but didn't have an entry in `documentation` somehow: {module_id:?}"); + }); + + docs_by_module.push(docs); + } + + debug_assert_eq!(documentation.len(), 0); + LoadedModule { module_id: state.root_id, interns, @@ -3346,7 +3358,7 @@ fn finish( resolved_implementations, sources, timings: state.timings, - docs_by_module: documentation, + docs_by_module, abilities_store, } } diff --git a/crates/compiler/load_internal/src/module.rs b/crates/compiler/load_internal/src/module.rs index 323456fb5f6..c106c4083c7 100644 --- a/crates/compiler/load_internal/src/module.rs +++ b/crates/compiler/load_internal/src/module.rs @@ -43,7 +43,7 @@ pub struct LoadedModule { pub resolved_implementations: ResolvedImplementations, pub sources: MutMap)>, pub timings: MutMap, - pub docs_by_module: VecMap, + pub docs_by_module: Vec<(ModuleId, ModuleDocumentation)>, pub abilities_store: AbilitiesStore, pub typechecked: MutMap, } diff --git a/crates/docs/src/lib.rs b/crates/docs/src/lib.rs index 2cd3e7bcca7..faa90e6baa3 100644 --- a/crates/docs/src/lib.rs +++ b/crates/docs/src/lib.rs @@ -110,13 +110,13 @@ pub fn generate_docs_html(root_file: PathBuf, build_dir: &Path) { .replace("", &base_url()) .replace( "", - render_sidebar(loaded_module.docs_by_module.values()).as_str(), + render_sidebar(loaded_module.docs_by_module.iter().map(|(_, docs)| docs)).as_str(), ); let all_exposed_symbols = { let mut set = VecSet::default(); - for docs in loaded_module.docs_by_module.values() { + for (_, docs) in loaded_module.docs_by_module.iter() { set.insert_all(docs.exposed_symbols.iter().copied()); } @@ -146,7 +146,7 @@ pub fn generate_docs_html(root_file: PathBuf, build_dir: &Path) { } // Write each package module's index.html file - for module_docs in loaded_module.docs_by_module.values() { + for (_, module_docs) in loaded_module.docs_by_module.iter() { let module_name = module_docs.name.as_str(); let module_dir = build_dir.join(module_name.replace('.', "/").as_str()); @@ -183,7 +183,7 @@ fn render_package_index(root_module: &LoadedModule) -> String { // The list items containing module links let mut module_list_buf = String::new(); - for module in root_module.docs_by_module.values() { + for (_, module) in root_module.docs_by_module.iter() { // The anchor tag containing the module link let mut link_buf = String::new();