summaryrefslogtreecommitdiff
path: root/cli/doc/class.rs
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2020-04-08 17:03:42 +0200
committerGitHub <noreply@github.com>2020-04-08 17:03:42 +0200
commit491b8e1cea76753397bdeb0aeb1598bc78d22c8f (patch)
tree2eadbbcd2efe744c222c0d1b161a0131e498848b /cli/doc/class.rs
parentfe17496831a0b3dcd252d097c82df529d665aad5 (diff)
feat(doc): handle function params and type params (#4672)
Diffstat (limited to 'cli/doc/class.rs')
-rw-r--r--cli/doc/class.rs50
1 files changed, 23 insertions, 27 deletions
diff --git a/cli/doc/class.rs b/cli/doc/class.rs
index 82b6c441c..410789041 100644
--- a/cli/doc/class.rs
+++ b/cli/doc/class.rs
@@ -6,10 +6,15 @@ use serde::Serialize;
use super::function::function_to_function_def;
use super::function::FunctionDef;
+use super::params::assign_pat_to_param_def;
+use super::params::ident_to_param_def;
+use super::params::pat_to_param_def;
use super::parser::DocParser;
use super::ts_type::ts_entity_name_to_name;
use super::ts_type::ts_type_ann_to_def;
use super::ts_type::TsTypeDef;
+use super::ts_type_param::maybe_type_param_decl_to_type_param_defs;
+use super::ts_type_param::TsTypeParamDef;
use super::Location;
use super::ParamDef;
@@ -40,8 +45,6 @@ pub struct ClassPropertyDef {
#[serde(rename_all = "camelCase")]
pub struct ClassMethodDef {
pub js_doc: Option<String>,
- // pub ts_type: Option<TsTypeDef>,
- // pub readonly: bool,
pub accessibility: Option<swc_ecma_ast::Accessibility>,
pub is_abstract: bool,
pub is_static: bool,
@@ -54,13 +57,14 @@ pub struct ClassMethodDef {
#[derive(Debug, Serialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct ClassDef {
- // TODO: decorators, type_params, super_type_params
+ // TODO(bartlomieju): decorators, super_type_params
pub is_abstract: bool,
pub constructors: Vec<ClassConstructorDef>,
pub properties: Vec<ClassPropertyDef>,
pub methods: Vec<ClassMethodDef>,
pub super_class: Option<String>,
pub implements: Vec<String>,
+ pub type_params: Vec<TsTypeParamDef>,
}
fn prop_name_to_string(
@@ -117,31 +121,20 @@ pub fn get_doc_for_class_decl(
let mut params = vec![];
for param in &ctor.params {
- use crate::swc_ecma_ast::Pat;
use crate::swc_ecma_ast::PatOrTsParamProp::*;
let param_def = match param {
- Pat(pat) => match pat {
- Pat::Ident(ident) => {
- let ts_type = ident
- .type_ann
- .as_ref()
- .map(|rt| ts_type_ann_to_def(&doc_parser.source_map, rt));
-
- ParamDef {
- name: ident.sym.to_string(),
- ts_type,
+ Pat(pat) => pat_to_param_def(pat),
+ TsParamProp(ts_param_prop) => {
+ use swc_ecma_ast::TsParamPropParam;
+
+ match &ts_param_prop.param {
+ TsParamPropParam::Ident(ident) => ident_to_param_def(ident),
+ TsParamPropParam::Assign(assign_pat) => {
+ assign_pat_to_param_def(assign_pat)
}
}
- _ => ParamDef {
- name: "<TODO>".to_string(),
- ts_type: None,
- },
- },
- TsParamProp(_) => ParamDef {
- name: "<TODO>".to_string(),
- ts_type: None,
- },
+ }
};
params.push(param_def);
}
@@ -162,8 +155,7 @@ pub fn get_doc_for_class_decl(
let method_js_doc = doc_parser.js_doc_for_span(class_method.span());
let method_name =
prop_name_to_string(&doc_parser.source_map, &class_method.key);
- let fn_def =
- function_to_function_def(doc_parser, &class_method.function);
+ let fn_def = function_to_function_def(&class_method.function);
let method_def = ClassMethodDef {
js_doc: method_js_doc,
accessibility: class_method.accessibility,
@@ -185,7 +177,7 @@ pub fn get_doc_for_class_decl(
let ts_type = class_prop
.type_ann
.as_ref()
- .map(|rt| ts_type_ann_to_def(&doc_parser.source_map, rt));
+ .map(|rt| ts_type_ann_to_def(rt));
use crate::swc_ecma_ast::Expr;
let prop_name = match &*class_prop.key {
@@ -208,13 +200,16 @@ pub fn get_doc_for_class_decl(
};
properties.push(prop_def);
}
- // TODO:
+ // TODO(bartlomieju):
TsIndexSignature(_) => {}
PrivateMethod(_) => {}
PrivateProp(_) => {}
}
}
+ let type_params = maybe_type_param_decl_to_type_param_defs(
+ class_decl.class.type_params.as_ref(),
+ );
let class_name = class_decl.ident.sym.to_string();
let class_def = ClassDef {
is_abstract: class_decl.class.is_abstract,
@@ -223,6 +218,7 @@ pub fn get_doc_for_class_decl(
constructors,
properties,
methods,
+ type_params,
};
(class_name, class_def)