diff options
author | Leo Kettmeir <crowlkats@toaxl.com> | 2023-12-30 01:04:50 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-30 00:04:50 +0000 |
commit | 4de9ddcf210e68ef81fcb00261a2c928b1650740 (patch) | |
tree | 76b1abcdab9d80865fba80e939d6affd81acf1fe /cli/tools/doc.rs | |
parent | 4740929950b7043da51a0b717c9e6e1116791f02 (diff) |
chore: update deno_doc to 0.85.0 (#21678)
Diffstat (limited to 'cli/tools/doc.rs')
-rw-r--r-- | cli/tools/doc.rs | 83 |
1 files changed, 76 insertions, 7 deletions
diff --git a/cli/tools/doc.rs b/cli/tools/doc.rs index be3f029ec..0eb83c372 100644 --- a/cli/tools/doc.rs +++ b/cli/tools/doc.rs @@ -153,8 +153,26 @@ pub async fn doc(flags: Flags, doc_flags: DocFlags) -> Result<(), AnyError> { } }; - if let Some(html_options) = doc_flags.html { - generate_docs_directory(&doc_nodes_by_url, html_options) + if let Some(html_options) = &doc_flags.html { + let deno_ns = if doc_flags.source_files != DocSourceFileFlag::Builtin { + let deno_ns = generate_doc_nodes_for_builtin_types( + doc_flags.clone(), + cli_options, + capturing_parser, + &analyzer, + ) + .await?; + let (_, deno_ns) = deno_ns.first().unwrap(); + + let deno_ns_symbols = + deno_doc::html::compute_namespaced_symbols(deno_ns, &[]); + + Some(deno_ns_symbols) + } else { + None + }; + + generate_docs_directory(&doc_nodes_by_url, html_options, deno_ns) .boxed_local() .await } else { @@ -178,19 +196,70 @@ pub async fn doc(flags: Flags, doc_flags: DocFlags) -> Result<(), AnyError> { } } +struct DocResolver {} + +impl deno_doc::html::HrefResolver for DocResolver { + fn resolve_global_symbol(&self, symbol: &[String], _context: &str) -> String { + format!( + "https://deno.land/api@{}?s={}", + env!("CARGO_PKG_VERSION"), + symbol.join(".") + ) + } + + fn resolve_import_href( + &self, + symbol: &[String], + src: &str, + ) -> Option<String> { + let mut url = ModuleSpecifier::parse(src).ok()?; + + if url.domain() == Some("deno.land") { + url.set_query(Some(&format!("s={}", symbol.join(".")))); + return Some(url.to_string()); + } + + None + } + + fn resolve_usage( + &self, + _current_specifier: &ModuleSpecifier, + current_file: &str, + ) -> String { + current_file.to_string() + } + + fn resolve_source(&self, location: &deno_doc::Location) -> String { + location.filename.clone() + } +} + async fn generate_docs_directory( doc_nodes_by_url: &IndexMap<ModuleSpecifier, Vec<doc::DocNode>>, - html_options: DocHtmlFlag, + html_options: &DocHtmlFlag, + deno_ns: Option<std::collections::HashSet<Vec<String>>>, ) -> Result<(), AnyError> { let cwd = std::env::current_dir().context("Failed to get CWD")?; let output_dir_resolved = cwd.join(&html_options.output); let options = deno_doc::html::GenerateOptions { - package_name: Some(html_options.name), + package_name: Some(html_options.name.to_owned()), main_entrypoint: None, - global_symbols: Default::default(), - global_symbol_href_resolver: Rc::new(|_, _| String::new()), - url_resolver: Rc::new(deno_doc::html::default_url_resolver), + global_symbols: deno_doc::html::NamespacedGlobalSymbols::new( + deno_ns + .map(|deno_ns| { + deno_ns + .into_iter() + .map(|symbol| (symbol, "deno".to_string())) + .collect() + }) + .unwrap_or_default(), + ), + rewrite_map: None, + hide_module_doc_title: false, + href_resolver: Rc::new(DocResolver {}), + sidebar_flatten_namespaces: false, }; let files = deno_doc::html::generate(options, doc_nodes_by_url) |