diff options
author | Ondřej Žára <ondrej.zara@gmail.com> | 2020-04-03 10:32:46 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-03 10:32:46 +0200 |
commit | b57d075c07c30000d46b09062cd9e7328bcff1bc (patch) | |
tree | a2889e16ad697a9e70b2c694319ab00ec2f27c2d | |
parent | c8fc29fcca0171166b7093d278bfbe03d970f1a5 (diff) |
`deno doc` parses super-class names (#4595)
Co-Authored-By: Luca Casonato <luca.casonato@antipy.com>
-rw-r--r-- | cli/doc/class.rs | 14 | ||||
-rw-r--r-- | cli/doc/printer.rs | 16 | ||||
-rw-r--r-- | cli/doc/tests.rs | 7 |
3 files changed, 32 insertions, 5 deletions
diff --git a/cli/doc/class.rs b/cli/doc/class.rs index 635fd585a..ddbefa55c 100644 --- a/cli/doc/class.rs +++ b/cli/doc/class.rs @@ -60,6 +60,7 @@ pub struct ClassDef { pub constructors: Vec<ClassConstructorDef>, pub properties: Vec<ClassPropertyDef>, pub methods: Vec<ClassMethodDef>, + pub super_class: Option<String>, } fn prop_name_to_string( @@ -85,6 +86,18 @@ pub fn get_doc_for_class_decl( let mut methods = vec![]; let mut properties = vec![]; + let super_class: Option<String> = match &class_decl.class.super_class { + Some(boxed) => { + use swc_ecma_ast::Expr; + let expr: &Expr = &**boxed; + match expr { + Expr::Ident(ident) => Some(ident.sym.to_string()), + _ => None, + } + } + None => None, + }; + for member in &class_decl.class.body { use swc_ecma_ast::ClassMember::*; @@ -198,6 +211,7 @@ pub fn get_doc_for_class_decl( let class_name = class_decl.ident.sym.to_string(); let class_def = ClassDef { is_abstract: class_decl.class.is_abstract, + super_class, constructors, properties, methods, diff --git a/cli/doc/printer.rs b/cli/doc/printer.rs index e5126b6bd..9b1d07685 100644 --- a/cli/doc/printer.rs +++ b/cli/doc/printer.rs @@ -427,11 +427,23 @@ fn format_function_signature(node: &doc::DocNode, indent: i64) -> String { } fn format_class_signature(node: &doc::DocNode, indent: i64) -> String { + let class_def = node.class_def.clone().unwrap(); + let super_suffix = if let Some(super_class) = class_def.super_class { + format!( + " {} {}", + colors::magenta("extends".to_string()), + colors::bold(super_class) + ) + } else { + String::from("") + }; + add_indent( format!( - "{} {}\n", + "{} {}{}\n", colors::magenta("class".to_string()), - colors::bold(node.name.clone()) + colors::bold(node.name.clone()), + super_suffix ), indent, ) diff --git a/cli/doc/tests.rs b/cli/doc/tests.rs index 7acadc228..16dce4dbe 100644 --- a/cli/doc/tests.rs +++ b/cli/doc/tests.rs @@ -8,9 +8,9 @@ use serde_json::json; fn export_fn() { let source_code = r#"/** * Hello there, this is a multiline JSdoc. -* +* * It has many lines -* +* * Or not that many? */ export function foo(a: string, b: number): void { @@ -139,6 +139,7 @@ export class Foobar extends Fizz implements Buzz { "jsDoc": "Class doc", "classDef": { "isAbstract": false, + "superClass": "Fizz", "constructors": [ { "jsDoc": "Constructor js doc", @@ -308,7 +309,7 @@ export class Foobar extends Fizz implements Buzz { assert!( colors::strip_ansi_codes(super::printer::format(entries).as_str()) - .contains("class Foobar") + .contains("class Foobar extends Fizz") ); } |