Module aliases passed into LoadedModule, and used in docs to generate docs for aliases exposed by the module

This commit is contained in:
Chadtech 2021-06-19 13:35:57 -04:00
parent fe3919f66e
commit 9d2976f14f
2 changed files with 24 additions and 2 deletions

View file

@ -621,6 +621,7 @@ pub struct LoadedModule {
pub type_problems: MutMap<ModuleId, Vec<solve::TypeError>>, pub type_problems: MutMap<ModuleId, Vec<solve::TypeError>>,
pub declarations_by_id: MutMap<ModuleId, Vec<Declaration>>, pub declarations_by_id: MutMap<ModuleId, Vec<Declaration>>,
pub exposed_to_host: MutMap<Symbol, Variable>, pub exposed_to_host: MutMap<Symbol, Variable>,
pub exposed_aliases: MutMap<Symbol, Alias>,
pub header_sources: MutMap<ModuleId, (PathBuf, Box<str>)>, pub header_sources: MutMap<ModuleId, (PathBuf, Box<str>)>,
pub sources: MutMap<ModuleId, (PathBuf, Box<str>)>, pub sources: MutMap<ModuleId, (PathBuf, Box<str>)>,
pub timings: MutMap<ModuleId, ModuleTiming>, pub timings: MutMap<ModuleId, ModuleTiming>,
@ -763,6 +764,7 @@ enum Msg<'a> {
FinishedAllTypeChecking { FinishedAllTypeChecking {
solved_subs: Solved<Subs>, solved_subs: Solved<Subs>,
exposed_vars_by_symbol: MutMap<Symbol, Variable>, exposed_vars_by_symbol: MutMap<Symbol, Variable>,
exposed_aliases_by_symbol: MutMap<Symbol, Alias>,
documentation: MutMap<ModuleId, ModuleDocumentation>, documentation: MutMap<ModuleId, ModuleDocumentation>,
}, },
FoundSpecializations { FoundSpecializations {
@ -1510,6 +1512,7 @@ where
Msg::FinishedAllTypeChecking { Msg::FinishedAllTypeChecking {
solved_subs, solved_subs,
exposed_vars_by_symbol, exposed_vars_by_symbol,
exposed_aliases_by_symbol,
documentation, documentation,
} => { } => {
// We're done! There should be no more messages pending. // We're done! There should be no more messages pending.
@ -1525,6 +1528,7 @@ where
return Ok(LoadResult::TypeChecked(finish( return Ok(LoadResult::TypeChecked(finish(
state, state,
solved_subs, solved_subs,
exposed_aliases_by_symbol,
exposed_vars_by_symbol, exposed_vars_by_symbol,
documentation, documentation,
))); )));
@ -1939,6 +1943,7 @@ fn update<'a>(
.send(Msg::FinishedAllTypeChecking { .send(Msg::FinishedAllTypeChecking {
solved_subs, solved_subs,
exposed_vars_by_symbol: solved_module.exposed_vars_by_symbol, exposed_vars_by_symbol: solved_module.exposed_vars_by_symbol,
exposed_aliases_by_symbol: solved_module.aliases,
documentation, documentation,
}) })
.map_err(|_| LoadingProblem::MsgChannelDied)?; .map_err(|_| LoadingProblem::MsgChannelDied)?;
@ -2263,6 +2268,7 @@ fn finish_specialization(
fn finish( fn finish(
state: State, state: State,
solved: Solved<Subs>, solved: Solved<Subs>,
exposed_aliases_by_symbol: MutMap<Symbol, Alias>,
exposed_vars_by_symbol: MutMap<Symbol, Variable>, exposed_vars_by_symbol: MutMap<Symbol, Variable>,
documentation: MutMap<ModuleId, ModuleDocumentation>, documentation: MutMap<ModuleId, ModuleDocumentation>,
) -> LoadedModule { ) -> LoadedModule {
@ -2290,6 +2296,10 @@ fn finish(
.map(|(id, (path, src))| (id, (path, src.into()))) .map(|(id, (path, src))| (id, (path, src.into())))
.collect(); .collect();
dbg!(&exposed_vars_by_symbol);
let exposed_aliases = exposed_aliases_by_symbol;
// todo!("Get exposed aliases");
LoadedModule { LoadedModule {
module_id: state.root_id, module_id: state.root_id,
interns, interns,
@ -2298,6 +2308,7 @@ fn finish(
type_problems: state.module_cache.type_problems, type_problems: state.module_cache.type_problems,
declarations_by_id: state.declarations_by_id, declarations_by_id: state.declarations_by_id,
exposed_to_host: exposed_vars_by_symbol.into_iter().collect(), exposed_to_host: exposed_vars_by_symbol.into_iter().collect(),
exposed_aliases,
header_sources, header_sources,
sources, sources,
timings: state.timings, timings: state.timings,

View file

@ -63,12 +63,23 @@ pub fn generate(filenames: Vec<PathBuf>, std_lib: StdLib, build_dir: &Path) {
// Write each package's module docs html file // Write each package's module docs html file
for loaded_module in package.modules.iter_mut() { for loaded_module in package.modules.iter_mut() {
let exposed_values = loaded_module let mut exposed_values = loaded_module
.exposed_to_host .exposed_to_host
.iter() .iter()
.map(|(symbol, _)| symbol.ident_string(&loaded_module.interns).to_string()) .map(|(symbol, _)| symbol.ident_string(&loaded_module.interns).to_string())
.collect::<Vec<String>>(); .collect::<Vec<String>>();
let mut exposed_aliases = loaded_module
.exposed_aliases
.iter()
.map(|(symbol, _)| symbol.ident_string(&loaded_module.interns).to_string())
.collect::<Vec<String>>();
let mut exports = Vec::new();
exports.append(&mut exposed_values);
exports.append(&mut exposed_aliases);
for module in loaded_module.documentation.values_mut() { for module in loaded_module.documentation.values_mut() {
let module_dir = build_dir.join(module.name.replace(".", "/").as_str()); let module_dir = build_dir.join(module.name.replace(".", "/").as_str());
@ -83,7 +94,7 @@ pub fn generate(filenames: Vec<PathBuf>, std_lib: StdLib, build_dir: &Path) {
) )
.replace( .replace(
"<!-- Module Docs -->", "<!-- Module Docs -->",
render_main_content(&loaded_module.interns, &exposed_values, module).as_str(), render_main_content(&loaded_module.interns, &exports, module).as_str(),
); );
fs::write(module_dir.join("index.html"), rendered_module) fs::write(module_dir.join("index.html"), rendered_module)