More works for ast node serialization

This commit is contained in:
강동윤 2019-02-25 19:07:20 +09:00
parent 3e2750ba5e
commit 27cd169522
6 changed files with 104 additions and 11 deletions

View File

@ -70,7 +70,11 @@ pub struct ClassProperty<K> {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub value: Option<Box<Expr>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[serde(
default,
rename = "typeAnnotation",
skip_serializing_if = "Option::is_none"
)]
pub type_ann: Option<TsTypeAnn>,
#[serde(default)]

View File

@ -188,7 +188,11 @@ pub struct BinExpr {
/// Function expression.
#[ast_node("FunctionExpression")]
pub struct FnExpr {
#[serde(default, skip_serializing_if = "Option::is_none")]
#[serde(
default,
rename = "identifier",
skip_serializing_if = "Option::is_none"
)]
pub ident: Option<Ident>,
#[serde(flatten)]
@ -199,7 +203,11 @@ pub struct FnExpr {
/// Class expression.
#[ast_node("ClassExpression")]
pub struct ClassExpr {
#[serde(default, skip_serializing_if = "Option::is_none")]
#[serde(
default,
rename = "identifier",
skip_serializing_if = "Option::is_none"
)]
pub ident: Option<Ident>,
#[serde(flatten)]
@ -296,10 +304,10 @@ pub struct ArrowExpr {
pub body: BlockStmtOrExpr,
#[serde(rename = "async")]
#[serde(default, rename = "async")]
pub is_async: bool,
#[serde(rename = "generator")]
#[serde(default, rename = "generator")]
pub is_generator: bool,
#[serde(
@ -388,6 +396,7 @@ pub struct ParenExpr {
#[serde(default)]
pub span: Span,
#[serde(rename = "expression")]
pub expr: Box<Expr>,
}

View File

@ -69,6 +69,7 @@ pub struct AssignPat {
/// EsTree `RestElement`
#[ast_node("RestElement")]
pub struct RestPat {
#[serde(rename = "rest")]
#[span(lo)]
pub dot3_token: Span,
@ -101,7 +102,7 @@ pub struct KeyValuePatProp {
pub value: Box<Pat>,
}
/// `{key}` or `{key = value}`
#[ast_node("AssignPatternProperty")]
#[ast_node("AssignmentPatternProperty")]
pub struct AssignPatProp {
#[serde(default)]
pub span: Span,

View File

@ -43,6 +43,7 @@ pub struct GetterProp {
#[serde(default)]
pub span: Span,
pub key: PropName,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub body: Option<BlockStmt>,
}
#[ast_node("SetterProperty")]
@ -51,6 +52,7 @@ pub struct SetterProp {
pub span: Span,
pub key: PropName,
pub param: Pat,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub body: Option<BlockStmt>,
}
#[ast_node("MethodProperty")]

View File

@ -86,7 +86,7 @@ pub struct WithStmt {
pub struct ReturnStmt {
#[serde(default)]
pub span: Span,
#[serde(rename = "argument")]
#[serde(default, rename = "argument", skip_serializing_if = "Option::is_none")]
pub arg: Option<Box<Expr>>,
}
@ -102,6 +102,7 @@ pub struct LabeledStmt {
pub struct BreakStmt {
#[serde(default)]
pub span: Span,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub label: Option<Ident>,
}
@ -109,6 +110,7 @@ pub struct BreakStmt {
pub struct ContinueStmt {
#[serde(default)]
pub span: Span,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub label: Option<Ident>,
}
@ -121,7 +123,7 @@ pub struct IfStmt {
#[serde(rename = "consequent")]
pub cons: Box<Stmt>,
#[serde(rename = "alternate")]
#[serde(default, rename = "alternate", skip_serializing_if = "Option::is_none")]
pub alt: Option<(Box<Stmt>)>,
}
@ -145,8 +147,13 @@ pub struct ThrowStmt {
pub struct TryStmt {
#[serde(default)]
pub span: Span,
pub block: BlockStmt,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub handler: Option<CatchClause>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub finalizer: Option<BlockStmt>,
}
@ -170,9 +177,16 @@ pub struct DoWhileStmt {
pub struct ForStmt {
#[serde(default)]
pub span: Span,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub init: Option<VarDeclOrExpr>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub test: Option<Box<Expr>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub update: Option<Box<Expr>>,
pub body: Box<Stmt>,
}
@ -194,7 +208,7 @@ pub struct ForOfStmt {
/// es2018
///
/// for-await-of statements, e.g., `for await (const x of xs) {`
#[serde(rename = "await")]
#[serde(default, rename = "await", skip_serializing_if = "Option::is_none")]
pub await_token: Option<Span>,
pub left: VarDeclOrPat,
pub right: Box<Expr>,
@ -207,6 +221,7 @@ pub struct SwitchCase {
pub span: Span,
/// None for `default:`
#[serde(default, skip_serializing_if = "Option::is_none")]
pub test: Option<Box<Expr>>,
#[serde(rename = "consequent")]

View File

@ -20,7 +20,7 @@ use swc_common::{ast_node, Span};
pub struct TsTypeAnn {
#[serde(default)]
pub span: Span,
#[serde(rename = "type_annotation")]
#[serde(rename = "typeAnnotation")]
pub type_ann: Box<TsType>,
}
@ -37,7 +37,11 @@ pub struct TsTypeParam {
#[serde(default)]
pub span: Span,
pub name: Ident,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub constraint: Option<Box<TsType>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub default: Option<Box<TsType>>,
}
@ -52,7 +56,9 @@ pub struct TsTypeParamInstantiation {
pub struct TsTypeCastExpr {
#[serde(default)]
pub span: Span,
#[serde(rename = "expression")]
pub expr: Box<Expr>,
#[serde(rename = "typeAnnotation")]
pub type_ann: TsTypeAnn,
}
@ -60,9 +66,10 @@ pub struct TsTypeCastExpr {
pub struct TsParamProp {
#[serde(default)]
pub span: Span,
#[serde(default)]
#[serde(default,skip_serializing_if="Vec::is_empty")]
pub decorators: Vec<Decorator>,
/// At least one of `accessibility` or `readonly` must be set.
#[serde(default, skip_serializing_if = "Option::is_none")]
pub accessibility: Option<Accessibility>,
pub readonly: bool,
pub param: TsParamPropParam,
@ -116,7 +123,13 @@ pub struct TsCallSignatureDecl {
#[serde(default)]
pub span: Span,
pub params: Vec<TsFnParam>,
#[serde(
default,
rename = "typeAnnotation",
skip_serializing_if = "Option::is_none"
)]
pub type_ann: Option<TsTypeAnn>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub type_params: Option<TsTypeParamDecl>,
}
@ -125,7 +138,13 @@ pub struct TsConstructSignatureDecl {
#[serde(default)]
pub span: Span,
pub params: Vec<TsFnParam>,
#[serde(
default,
rename = "typeAnnotation",
skip_serializing_if = "Option::is_none"
)]
pub type_ann: Option<TsTypeAnn>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub type_params: Option<TsTypeParamDecl>,
}
@ -137,9 +156,16 @@ pub struct TsPropertySignature {
pub key: Box<Expr>,
pub computed: bool,
pub optional: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub init: Option<Box<Expr>>,
pub params: Vec<TsFnParam>,
#[serde(
default,
rename = "typeAnnotation",
skip_serializing_if = "Option::is_none"
)]
pub type_ann: Option<TsTypeAnn>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub type_params: Option<TsTypeParamDecl>,
}
@ -152,13 +178,20 @@ pub struct TsMethodSignature {
pub computed: bool,
pub optional: bool,
pub params: Vec<TsFnParam>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub type_ann: Option<TsTypeAnn>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub type_params: Option<TsTypeParamDecl>,
}
#[ast_node("TsIndexSignature")]
pub struct TsIndexSignature {
pub params: Vec<TsFnParam>,
#[serde(
default,
rename = "typeAnnotation",
skip_serializing_if = "Option::is_none"
)]
pub type_ann: Option<TsTypeAnn>,
pub readonly: bool,
@ -289,7 +322,9 @@ pub struct TsFnType {
pub span: Span,
pub params: Vec<TsFnParam>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub type_params: Option<TsTypeParamDecl>,
#[serde(rename = "typeAnnotation")]
pub type_ann: TsTypeAnn,
}
@ -298,7 +333,9 @@ pub struct TsConstructorType {
#[serde(default)]
pub span: Span,
pub params: Vec<TsFnParam>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub type_params: Option<TsTypeParamDecl>,
#[serde(rename = "typeAnnotation")]
pub type_ann: TsTypeAnn,
}
@ -307,6 +344,7 @@ pub struct TsTypeRef {
#[serde(default)]
pub span: Span,
pub type_name: TsEntityName,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub type_params: Option<TsTypeParamInstantiation>,
}
@ -315,6 +353,7 @@ pub struct TsTypePredicate {
#[serde(default)]
pub span: Span,
pub param_name: TsThisTypeOrIdent,
#[serde(rename = "typeAnnotation")]
pub type_ann: TsTypeAnn,
}
@ -358,6 +397,7 @@ pub struct TsTupleType {
pub struct TsOptionalType {
#[serde(default)]
pub span: Span,
#[serde(rename = "typeAnnotation")]
pub type_ann: Box<TsType>,
}
@ -365,6 +405,7 @@ pub struct TsOptionalType {
pub struct TsRestType {
#[serde(default)]
pub span: Span,
#[serde(rename = "typeAnnotation")]
pub type_ann: Box<TsType>,
}
@ -409,6 +450,7 @@ pub struct TsInferType {
pub struct TsParenthesizedType {
#[serde(default)]
pub span: Span,
#[serde(rename = "typeAnnotation")]
pub type_ann: Box<TsType>,
}
@ -417,6 +459,7 @@ pub struct TsTypeOperator {
#[serde(default)]
pub span: Span,
pub op: TsTypeOperatorOp,
#[serde(rename = "typeAnnotation")]
pub type_ann: Box<TsType>,
}
@ -433,6 +476,7 @@ pub enum TsTypeOperatorOp {
pub struct TsIndexedAccessType {
#[serde(default)]
pub span: Span,
$[serde(rename="objectType")]
pub obj_type: Box<TsType>,
pub index_type: Box<TsType>,
}
@ -503,9 +547,12 @@ impl<'de> Deserialize<'de> for TruePlusMinus {
pub struct TsMappedType {
#[serde(default)]
pub span: Span,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub readonly: Option<TruePlusMinus>,
pub type_param: TsTypeParam,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub optional: Option<TruePlusMinus>,
#[serde(default,rename="typeAnnotation", skip_serializing_if = "Option::is_none")]
pub type_ann: Option<Box<TsType>>,
}
@ -513,6 +560,7 @@ pub struct TsMappedType {
pub struct TsLitType {
#[serde(default)]
pub span: Span,
#[serde(rename="literal")]
pub lit: TsLit,
}
@ -533,6 +581,7 @@ pub struct TsInterfaceDecl {
pub span: Span,
pub id: Ident,
pub declare: bool,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub type_params: Option<TsTypeParamDecl>,
pub extends: Vec<TsExprWithTypeArgs>,
pub body: TsInterfaceBody,
@ -549,7 +598,9 @@ pub struct TsInterfaceBody {
pub struct TsExprWithTypeArgs {
#[serde(default)]
pub span: Span,
#[serde(rename = "expression")]
pub expr: TsEntityName,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub type_params: Option<TsTypeParamInstantiation>,
}
@ -559,7 +610,9 @@ pub struct TsTypeAliasDecl {
pub span: Span,
pub declare: bool,
pub id: Ident,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub type_params: Option<TsTypeParamDecl>,
#[serde(rename = "typeAnnotation")]
pub type_ann: Box<TsType>,
}
@ -578,6 +631,7 @@ pub struct TsEnumMember {
#[serde(default)]
pub span: Span,
pub id: TsEnumMemberId,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub init: Option<Box<Expr>>,
}
@ -595,6 +649,7 @@ pub struct TsModuleDecl {
/// In TypeScript, this is only available through`node.flags`.
pub global: bool,
pub id: TsModuleName,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub body: Option<TsNamespaceBody>,
}
@ -650,6 +705,7 @@ pub enum TsModuleRef {
pub struct TsExternalModuleRef {
#[serde(default)]
pub span: Span,
#[serde(rename = "expression")]
pub expr: Str,
}
@ -660,6 +716,7 @@ pub struct TsExternalModuleRef {
pub struct TsExportAssignment {
#[serde(default)]
pub span: Span,
#[serde(rename = "expression")]
pub expr: Box<Expr>,
}
@ -678,7 +735,9 @@ pub struct TsNamespaceExportDecl {
pub struct TsAsExpr {
#[serde(default)]
pub span: Span,
#[serde(rename = "expression")]
pub expr: Box<Expr>,
#[serde(rename = "typeAnnotation")]
pub type_ann: Box<TsType>,
}
@ -686,7 +745,9 @@ pub struct TsAsExpr {
pub struct TsTypeAssertion {
#[serde(default)]
pub span: Span,
#[serde(rename = "expression")]
pub expr: Box<Expr>,
#[serde(rename = "typeAnnotation")]
pub type_ann: Box<TsType>,
}
@ -694,6 +755,7 @@ pub struct TsTypeAssertion {
pub struct TsNonNullExpr {
#[serde(default)]
pub span: Span,
#[serde(rename = "expression")]
pub expr: Box<Expr>,
}