summaryrefslogtreecommitdiff
path: root/cli/tools/doc.rs
diff options
context:
space:
mode:
authorLeo Kettmeir <crowlkats@toaxl.com>2023-12-30 01:04:50 +0100
committerGitHub <noreply@github.com>2023-12-30 00:04:50 +0000
commit4de9ddcf210e68ef81fcb00261a2c928b1650740 (patch)
tree76b1abcdab9d80865fba80e939d6affd81acf1fe /cli/tools/doc.rs
parent4740929950b7043da51a0b717c9e6e1116791f02 (diff)
chore: update deno_doc to 0.85.0 (#21678)
Diffstat (limited to 'cli/tools/doc.rs')
-rw-r--r--cli/tools/doc.rs83
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)