From 3fac487461abf055165fe0e2bb962573950277b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Sat, 28 Mar 2020 19:16:57 +0100 Subject: feat: Add "deno doc" subcommand (#4500) --- cli/doc/mod.rs | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 cli/doc/mod.rs (limited to 'cli/doc/mod.rs') diff --git a/cli/doc/mod.rs b/cli/doc/mod.rs new file mode 100644 index 000000000..4926dccd7 --- /dev/null +++ b/cli/doc/mod.rs @@ -0,0 +1,63 @@ +// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. +pub mod class; +pub mod r#enum; +pub mod function; +pub mod interface; +pub mod module; +pub mod namespace; +mod node; +pub mod parser; +pub mod printer; +pub mod ts_type; +pub mod type_alias; +pub mod variable; + +pub use node::DocNode; +pub use node::DocNodeKind; +pub use node::Location; +pub use node::ParamDef; +pub use parser::DocParser; + +#[cfg(test)] +mod tests; + +pub fn find_node_by_name_recursively( + doc_nodes: Vec, + name: String, +) -> Option { + let mut parts = name.splitn(2, '.'); + let name = parts.next(); + let leftover = parts.next(); + name?; + let node = find_node_by_name(doc_nodes, name.unwrap().to_string()); + match node { + Some(node) => match node.kind { + DocNodeKind::Namespace => { + if let Some(leftover) = leftover { + find_node_by_name_recursively( + node.namespace_def.unwrap().elements, + leftover.to_string(), + ) + } else { + Some(node) + } + } + _ => { + if leftover.is_none() { + Some(node) + } else { + None + } + } + }, + _ => None, + } +} + +fn find_node_by_name(doc_nodes: Vec, name: String) -> Option { + let node = doc_nodes.iter().find(|node| node.name == name); + match node { + Some(node) => Some(node.clone()), + None => None, + } +} -- cgit v1.2.3