mirror of
https://github.com/denoland/deno.git
synced 2025-09-28 21:24:48 +00:00
feat(doc): handle function params and type params (#4672)
This commit is contained in:
parent
fe17496831
commit
491b8e1cea
13 changed files with 518 additions and 289 deletions
|
@ -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<TsTypeDef>,
|
||||
pub is_async: bool,
|
||||
pub is_generator: bool,
|
||||
// TODO: type_params, decorators
|
||||
pub type_params: Vec<TsTypeParamDef>,
|
||||
// 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: "<TODO>".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)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue