diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2020-04-08 17:03:42 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-08 17:03:42 +0200 |
commit | 491b8e1cea76753397bdeb0aeb1598bc78d22c8f (patch) | |
tree | 2eadbbcd2efe744c222c0d1b161a0131e498848b /cli/doc/class.rs | |
parent | fe17496831a0b3dcd252d097c82df529d665aad5 (diff) |
feat(doc): handle function params and type params (#4672)
Diffstat (limited to 'cli/doc/class.rs')
-rw-r--r-- | cli/doc/class.rs | 50 |
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) |