diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2020-03-28 19:16:57 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-28 14:16:57 -0400 |
commit | 3fac487461abf055165fe0e2bb962573950277b8 (patch) | |
tree | c0ba09a2049975f9eb8625365e3ba395e67d8b50 /cli/doc/mod.rs | |
parent | bced52505f32d6cca4f944bb610a8a26767908a8 (diff) |
feat: Add "deno doc" subcommand (#4500)
Diffstat (limited to 'cli/doc/mod.rs')
-rw-r--r-- | cli/doc/mod.rs | 63 |
1 files changed, 63 insertions, 0 deletions
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<DocNode>, + name: String, +) -> Option<DocNode> { + 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<DocNode>, name: String) -> Option<DocNode> { + let node = doc_nodes.iter().find(|node| node.name == name); + match node { + Some(node) => Some(node.clone()), + None => None, + } +} |