1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-12-23 07:44:48 -05:00

deno doc parses super-class names (#4595)

Co-Authored-By: Luca Casonato <luca.casonato@antipy.com>
This commit is contained in:
Ondřej Žára 2020-04-03 10:32:46 +02:00 committed by GitHub
parent c8fc29fcca
commit b57d075c07
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 5 deletions

View file

@ -60,6 +60,7 @@ pub struct ClassDef {
pub constructors: Vec<ClassConstructorDef>, pub constructors: Vec<ClassConstructorDef>,
pub properties: Vec<ClassPropertyDef>, pub properties: Vec<ClassPropertyDef>,
pub methods: Vec<ClassMethodDef>, pub methods: Vec<ClassMethodDef>,
pub super_class: Option<String>,
} }
fn prop_name_to_string( fn prop_name_to_string(
@ -85,6 +86,18 @@ pub fn get_doc_for_class_decl(
let mut methods = vec![]; let mut methods = vec![];
let mut properties = 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 { for member in &class_decl.class.body {
use swc_ecma_ast::ClassMember::*; 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_name = class_decl.ident.sym.to_string();
let class_def = ClassDef { let class_def = ClassDef {
is_abstract: class_decl.class.is_abstract, is_abstract: class_decl.class.is_abstract,
super_class,
constructors, constructors,
properties, properties,
methods, methods,

View file

@ -427,11 +427,23 @@ fn format_function_signature(node: &doc::DocNode, indent: i64) -> String {
} }
fn format_class_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( add_indent(
format!( format!(
"{} {}\n", "{} {}{}\n",
colors::magenta("class".to_string()), colors::magenta("class".to_string()),
colors::bold(node.name.clone()) colors::bold(node.name.clone()),
super_suffix
), ),
indent, indent,
) )

View file

@ -8,9 +8,9 @@ use serde_json::json;
fn export_fn() { fn export_fn() {
let source_code = r#"/** let source_code = r#"/**
* Hello there, this is a multiline JSdoc. * Hello there, this is a multiline JSdoc.
* *
* It has many lines * It has many lines
* *
* Or not that many? * Or not that many?
*/ */
export function foo(a: string, b: number): void { export function foo(a: string, b: number): void {
@ -139,6 +139,7 @@ export class Foobar extends Fizz implements Buzz {
"jsDoc": "Class doc", "jsDoc": "Class doc",
"classDef": { "classDef": {
"isAbstract": false, "isAbstract": false,
"superClass": "Fizz",
"constructors": [ "constructors": [
{ {
"jsDoc": "Constructor js doc", "jsDoc": "Constructor js doc",
@ -308,7 +309,7 @@ export class Foobar extends Fizz implements Buzz {
assert!( assert!(
colors::strip_ansi_codes(super::printer::format(entries).as_str()) colors::strip_ansi_codes(super::printer::format(entries).as_str())
.contains("class Foobar") .contains("class Foobar extends Fizz")
); );
} }