diff options
Diffstat (limited to 'cli/doc/interface.rs')
-rw-r--r-- | cli/doc/interface.rs | 303 |
1 files changed, 0 insertions, 303 deletions
diff --git a/cli/doc/interface.rs b/cli/doc/interface.rs deleted file mode 100644 index 3c72bac23..000000000 --- a/cli/doc/interface.rs +++ /dev/null @@ -1,303 +0,0 @@ -// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license. -use crate::colors; -use crate::doc::display::{display_optional, display_readonly, SliceDisplayer}; -use serde::Serialize; - -use super::params::ts_fn_param_to_param_def; -use super::parser::DocParser; -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; - -use std::fmt::{Display, Formatter, Result as FmtResult}; - -#[derive(Debug, Serialize, Clone)] -#[serde(rename_all = "camelCase")] -pub struct InterfaceMethodDef { - pub name: String, - pub location: Location, - pub js_doc: Option<String>, - pub optional: bool, - pub params: Vec<ParamDef>, - pub return_type: Option<TsTypeDef>, - pub type_params: Vec<TsTypeParamDef>, -} - -impl Display for InterfaceMethodDef { - fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { - write!( - f, - "{}{}({})", - colors::bold(&self.name), - display_optional(self.optional), - SliceDisplayer::new(&self.params, ", ", false), - )?; - if let Some(return_type) = &self.return_type { - write!(f, ": {}", return_type)?; - } - Ok(()) - } -} - -#[derive(Debug, Serialize, Clone)] -#[serde(rename_all = "camelCase")] -pub struct InterfacePropertyDef { - pub name: String, - pub location: Location, - pub js_doc: Option<String>, - pub params: Vec<ParamDef>, - pub computed: bool, - pub optional: bool, - pub ts_type: Option<TsTypeDef>, - pub type_params: Vec<TsTypeParamDef>, -} - -impl Display for InterfacePropertyDef { - fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { - write!( - f, - "{}{}", - colors::bold(&self.name), - display_optional(self.optional), - )?; - if let Some(ts_type) = &self.ts_type { - write!(f, ": {}", ts_type)?; - } - Ok(()) - } -} - -#[derive(Debug, Serialize, Clone)] -#[serde(rename_all = "camelCase")] -pub struct InterfaceIndexSignatureDef { - pub readonly: bool, - pub params: Vec<ParamDef>, - pub ts_type: Option<TsTypeDef>, -} - -impl Display for InterfaceIndexSignatureDef { - fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult { - write!( - f, - "{}[{}]", - display_readonly(self.readonly), - SliceDisplayer::new(&self.params, ", ", false) - )?; - if let Some(ts_type) = &self.ts_type { - write!(f, ": {}", ts_type)?; - } - Ok(()) - } -} - -#[derive(Debug, Serialize, Clone)] -#[serde(rename_all = "camelCase")] -pub struct InterfaceCallSignatureDef { - pub location: Location, - pub js_doc: Option<String>, - pub params: Vec<ParamDef>, - pub ts_type: Option<TsTypeDef>, - pub type_params: Vec<TsTypeParamDef>, -} - -#[derive(Debug, Serialize, Clone)] -#[serde(rename_all = "camelCase")] -pub struct InterfaceDef { - pub extends: Vec<TsTypeDef>, - pub methods: Vec<InterfaceMethodDef>, - pub properties: Vec<InterfacePropertyDef>, - pub call_signatures: Vec<InterfaceCallSignatureDef>, - pub index_signatures: Vec<InterfaceIndexSignatureDef>, - pub type_params: Vec<TsTypeParamDef>, -} - -pub fn expr_to_name(expr: &swc_ecmascript::ast::Expr) -> String { - use swc_ecmascript::ast::Expr::*; - use swc_ecmascript::ast::ExprOrSuper::*; - - match expr { - Ident(ident) => ident.sym.to_string(), - Member(member_expr) => { - let left = match &member_expr.obj { - Super(_) => "super".to_string(), - Expr(boxed_expr) => expr_to_name(&*boxed_expr), - }; - let right = expr_to_name(&*member_expr.prop); - format!("[{}.{}]", left, right) - } - _ => "<TODO>".to_string(), - } -} - -pub fn get_doc_for_ts_interface_decl( - doc_parser: &DocParser, - interface_decl: &swc_ecmascript::ast::TsInterfaceDecl, -) -> (String, InterfaceDef) { - let interface_name = interface_decl.id.sym.to_string(); - - let mut methods = vec![]; - let mut properties = vec![]; - let mut call_signatures = vec![]; - let mut index_signatures = vec![]; - - for type_element in &interface_decl.body.body { - use swc_ecmascript::ast::TsTypeElement::*; - - match &type_element { - TsMethodSignature(ts_method_sig) => { - let method_js_doc = doc_parser.js_doc_for_span(ts_method_sig.span); - - let mut params = vec![]; - - for param in &ts_method_sig.params { - let param_def = ts_fn_param_to_param_def( - param, - Some(&doc_parser.ast_parser.source_map), - ); - params.push(param_def); - } - - let name = expr_to_name(&*ts_method_sig.key); - - let maybe_return_type = ts_method_sig - .type_ann - .as_ref() - .map(|rt| ts_type_ann_to_def(rt)); - - let type_params = maybe_type_param_decl_to_type_param_defs( - ts_method_sig.type_params.as_ref(), - ); - - let method_def = InterfaceMethodDef { - name, - js_doc: method_js_doc, - location: doc_parser - .ast_parser - .get_span_location(ts_method_sig.span) - .into(), - optional: ts_method_sig.optional, - params, - return_type: maybe_return_type, - type_params, - }; - methods.push(method_def); - } - TsPropertySignature(ts_prop_sig) => { - let prop_js_doc = doc_parser.js_doc_for_span(ts_prop_sig.span); - let name = expr_to_name(&*ts_prop_sig.key); - - let mut params = vec![]; - - for param in &ts_prop_sig.params { - let param_def = ts_fn_param_to_param_def( - param, - Some(&doc_parser.ast_parser.source_map), - ); - params.push(param_def); - } - - let ts_type = ts_prop_sig - .type_ann - .as_ref() - .map(|rt| ts_type_ann_to_def(rt)); - - let type_params = maybe_type_param_decl_to_type_param_defs( - ts_prop_sig.type_params.as_ref(), - ); - - let prop_def = InterfacePropertyDef { - name, - js_doc: prop_js_doc, - location: doc_parser - .ast_parser - .get_span_location(ts_prop_sig.span) - .into(), - params, - ts_type, - computed: ts_prop_sig.computed, - optional: ts_prop_sig.optional, - type_params, - }; - properties.push(prop_def); - } - TsCallSignatureDecl(ts_call_sig) => { - let call_sig_js_doc = doc_parser.js_doc_for_span(ts_call_sig.span); - - let mut params = vec![]; - for param in &ts_call_sig.params { - let param_def = ts_fn_param_to_param_def( - param, - Some(&doc_parser.ast_parser.source_map), - ); - params.push(param_def); - } - - let ts_type = ts_call_sig - .type_ann - .as_ref() - .map(|rt| ts_type_ann_to_def(rt)); - - let type_params = maybe_type_param_decl_to_type_param_defs( - ts_call_sig.type_params.as_ref(), - ); - - let call_sig_def = InterfaceCallSignatureDef { - js_doc: call_sig_js_doc, - location: doc_parser - .ast_parser - .get_span_location(ts_call_sig.span) - .into(), - params, - ts_type, - type_params, - }; - call_signatures.push(call_sig_def); - } - TsIndexSignature(ts_index_sig) => { - let mut params = vec![]; - for param in &ts_index_sig.params { - let param_def = ts_fn_param_to_param_def(param, None); - params.push(param_def); - } - - let ts_type = ts_index_sig - .type_ann - .as_ref() - .map(|rt| (&*rt.type_ann).into()); - - let index_sig_def = InterfaceIndexSignatureDef { - readonly: ts_index_sig.readonly, - params, - ts_type, - }; - index_signatures.push(index_sig_def); - } - // TODO: - TsConstructSignatureDecl(_) => {} - } - } - - let type_params = maybe_type_param_decl_to_type_param_defs( - interface_decl.type_params.as_ref(), - ); - - let extends = interface_decl - .extends - .iter() - .map(|expr| expr.into()) - .collect::<Vec<TsTypeDef>>(); - - let interface_def = InterfaceDef { - extends, - methods, - properties, - call_signatures, - index_signatures, - type_params, - }; - - (interface_name, interface_def) -} |