From 491b8e1cea76753397bdeb0aeb1598bc78d22c8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20Iwa=C5=84czuk?= Date: Wed, 8 Apr 2020 17:03:42 +0200 Subject: feat(doc): handle function params and type params (#4672) --- cli/doc/function.rs | 43 ++++++++++++++----------------------------- 1 file changed, 14 insertions(+), 29 deletions(-) (limited to 'cli/doc/function.rs') diff --git a/cli/doc/function.rs b/cli/doc/function.rs index fbfd2d015..4c101ab08 100644 --- a/cli/doc/function.rs +++ b/cli/doc/function.rs @@ -1,11 +1,12 @@ // Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. -use crate::swc_ecma_ast; -use serde::Serialize; - -use super::parser::DocParser; +use super::params::pat_to_param_def; 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::ParamDef; +use crate::swc_ecma_ast; +use serde::Serialize; #[derive(Debug, Serialize, Clone)] #[serde(rename_all = "camelCase")] @@ -14,57 +15,41 @@ pub struct FunctionDef { pub return_type: Option, pub is_async: bool, pub is_generator: bool, - // TODO: type_params, decorators + pub type_params: Vec, + // TODO(bartlomieju): decorators } pub fn function_to_function_def( - doc_parser: &DocParser, function: &swc_ecma_ast::Function, ) -> FunctionDef { let mut params = vec![]; for param in &function.params { - use crate::swc_ecma_ast::Pat; - - let param_def = match param { - 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, - } - } - _ => ParamDef { - name: "".to_string(), - ts_type: None, - }, - }; - + let param_def = pat_to_param_def(param); params.push(param_def); } let maybe_return_type = function .return_type .as_ref() - .map(|rt| ts_type_ann_to_def(&doc_parser.source_map, rt)); + .map(|rt| ts_type_ann_to_def(rt)); + + let type_params = + maybe_type_param_decl_to_type_param_defs(function.type_params.as_ref()); FunctionDef { params, return_type: maybe_return_type, is_async: function.is_async, is_generator: function.is_generator, + type_params, } } pub fn get_doc_for_fn_decl( - doc_parser: &DocParser, fn_decl: &swc_ecma_ast::FnDecl, ) -> (String, FunctionDef) { let name = fn_decl.ident.sym.to_string(); - let fn_def = function_to_function_def(doc_parser, &fn_decl.function); + let fn_def = function_to_function_def(&fn_decl.function); (name, fn_def) } -- cgit v1.2.3