mirror of
https://github.com/swc-project/swc.git
synced 2024-12-04 07:55:59 +03:00
fix(es/ast): Fix definition of SetterProp
(#8314)
**Related issue:** - Closes #8157 - Closes #8377
This commit is contained in:
parent
572bcaefc1
commit
bc38ac906c
@ -6,10 +6,9 @@ use crate::{
|
|||||||
function::Function,
|
function::Function,
|
||||||
ident::Ident,
|
ident::Ident,
|
||||||
lit::{BigInt, Number, Str},
|
lit::{BigInt, Number, Str},
|
||||||
pat::Pat,
|
|
||||||
stmt::BlockStmt,
|
stmt::BlockStmt,
|
||||||
typescript::TsTypeAnn,
|
typescript::TsTypeAnn,
|
||||||
Id, MemberProp,
|
Id, MemberProp, Pat,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[ast_node]
|
#[ast_node]
|
||||||
@ -76,6 +75,7 @@ pub struct GetterProp {
|
|||||||
pub struct SetterProp {
|
pub struct SetterProp {
|
||||||
pub span: Span,
|
pub span: Span,
|
||||||
pub key: PropName,
|
pub key: PropName,
|
||||||
|
pub this_param: Option<Pat>,
|
||||||
pub param: Box<Pat>,
|
pub param: Box<Pat>,
|
||||||
#[cfg_attr(feature = "serde-impl", serde(default))]
|
#[cfg_attr(feature = "serde-impl", serde(default))]
|
||||||
pub body: Option<BlockStmt>,
|
pub body: Option<BlockStmt>,
|
||||||
|
@ -2218,7 +2218,15 @@ where
|
|||||||
formatting_space!();
|
formatting_space!();
|
||||||
|
|
||||||
punct!("(");
|
punct!("(");
|
||||||
|
if let Some(this) = &node.this_param {
|
||||||
|
emit!(this);
|
||||||
|
punct!(",");
|
||||||
|
|
||||||
|
formatting_space!();
|
||||||
|
}
|
||||||
|
|
||||||
emit!(node.param);
|
emit!(node.param);
|
||||||
|
|
||||||
punct!(")");
|
punct!(")");
|
||||||
|
|
||||||
emit!(node.body);
|
emit!(node.body);
|
||||||
|
@ -77,14 +77,14 @@ macro_rules! impl_visit_mut_fn {
|
|||||||
let (mut params, body) = self.visit_mut_fn_like(
|
let (mut params, body) = self.visit_mut_fn_like(
|
||||||
&mut vec![Param {
|
&mut vec![Param {
|
||||||
span: DUMMY_SP,
|
span: DUMMY_SP,
|
||||||
decorators: Default::default(),
|
decorators: vec![],
|
||||||
pat: *f.param.take(),
|
pat: *f.param.take(),
|
||||||
}],
|
}],
|
||||||
&mut f.body.take().unwrap(),
|
&mut f.body.take().unwrap(),
|
||||||
);
|
);
|
||||||
debug_assert!(params.len() == 1);
|
debug_assert!(params.len() == 1);
|
||||||
|
|
||||||
f.param = Box::new(params.pop().unwrap().pat);
|
f.param = Box::new(params.into_iter().next().unwrap().pat);
|
||||||
f.body = Some(body);
|
f.body = Some(body);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,6 +172,7 @@ impl VisitMut for ComputedProps {
|
|||||||
body,
|
body,
|
||||||
param,
|
param,
|
||||||
key,
|
key,
|
||||||
|
..
|
||||||
}) => (
|
}) => (
|
||||||
key,
|
key,
|
||||||
Box::new(Function {
|
Box::new(Function {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
//! Parser for object literal.
|
//! Parser for object literal.
|
||||||
|
|
||||||
use swc_common::Spanned;
|
use swc_common::{Spanned, DUMMY_SP};
|
||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::parser::class_and_fn::is_not_this;
|
use crate::parser::class_and_fn::is_not_this;
|
||||||
@ -355,21 +355,33 @@ impl<I: Tokens> ParseObject<Box<Expr>> for Parser<I> {
|
|||||||
|Function {
|
|Function {
|
||||||
mut params, body, ..
|
mut params, body, ..
|
||||||
}| {
|
}| {
|
||||||
params.retain(|p| match &p.pat {
|
let mut this = None;
|
||||||
Pat::Ident(p) => p.sym != "this",
|
if params.len() >= 2 {
|
||||||
_ => true,
|
this = Some(params.remove(0).pat);
|
||||||
});
|
}
|
||||||
|
|
||||||
|
let param = Box::new(
|
||||||
|
params
|
||||||
|
.into_iter()
|
||||||
|
.next()
|
||||||
|
.map(|v| v.pat)
|
||||||
|
.unwrap_or_else(|| {
|
||||||
|
parser.emit_err(
|
||||||
|
key_span,
|
||||||
|
SyntaxError::SetterParam,
|
||||||
|
);
|
||||||
|
|
||||||
|
Pat::Invalid(Invalid { span: DUMMY_SP })
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
// debug_assert_eq!(params.len(), 1);
|
// debug_assert_eq!(params.len(), 1);
|
||||||
PropOrSpread::Prop(Box::new(Prop::Setter(SetterProp {
|
PropOrSpread::Prop(Box::new(Prop::Setter(SetterProp {
|
||||||
span: span!(parser, start),
|
span: span!(parser, start),
|
||||||
key,
|
key,
|
||||||
body,
|
body,
|
||||||
param: Box::new(
|
param,
|
||||||
params.into_iter().map(|p| p.pat).next().unwrap_or(
|
this_param: this,
|
||||||
Pat::Invalid(Invalid { span: key_span }),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
})))
|
})))
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -334,6 +334,7 @@
|
|||||||
"value": "b",
|
"value": "b",
|
||||||
"optional": false
|
"optional": false
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
|
@ -334,6 +334,7 @@
|
|||||||
"value": "b",
|
"value": "b",
|
||||||
"optional": false
|
"optional": false
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
|
@ -269,6 +269,7 @@
|
|||||||
"optional": false
|
"optional": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
@ -408,6 +409,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
@ -518,6 +520,7 @@
|
|||||||
"raw": "\"\""
|
"raw": "\"\""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
@ -619,6 +622,7 @@
|
|||||||
"optional": false
|
"optional": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
@ -748,6 +752,7 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
|
@ -269,6 +269,7 @@
|
|||||||
"optional": false
|
"optional": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
@ -408,6 +409,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
@ -518,6 +520,7 @@
|
|||||||
"raw": "\"\""
|
"raw": "\"\""
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
@ -619,6 +622,7 @@
|
|||||||
"optional": false
|
"optional": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
@ -748,6 +752,7 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
|
@ -160,6 +160,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
|
@ -160,6 +160,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
|
@ -270,6 +270,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
|
@ -270,6 +270,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
|
@ -1728,6 +1728,7 @@
|
|||||||
"value": "x",
|
"value": "x",
|
||||||
"optional": false
|
"optional": false
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
@ -1935,6 +1936,7 @@
|
|||||||
"value": "y",
|
"value": "y",
|
||||||
"optional": false
|
"optional": false
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
|
@ -2808,6 +2808,7 @@
|
|||||||
"value": "X",
|
"value": "X",
|
||||||
"optional": false
|
"optional": false
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
|
@ -148,6 +148,7 @@
|
|||||||
"value": "a",
|
"value": "a",
|
||||||
"optional": false
|
"optional": false
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
@ -275,6 +276,7 @@
|
|||||||
"value": "a",
|
"value": "a",
|
||||||
"optional": false
|
"optional": false
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
|
@ -196,6 +196,7 @@
|
|||||||
"value": "bar",
|
"value": "bar",
|
||||||
"optional": false
|
"optional": false
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
@ -391,6 +392,7 @@
|
|||||||
"value": "foo",
|
"value": "foo",
|
||||||
"optional": false
|
"optional": false
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
|
@ -59,6 +59,7 @@
|
|||||||
"value": "Foo",
|
"value": "Foo",
|
||||||
"optional": false
|
"optional": false
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
|
@ -67,6 +67,7 @@
|
|||||||
"optional": false
|
"optional": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
|
@ -59,6 +59,7 @@
|
|||||||
"value": "Foo",
|
"value": "Foo",
|
||||||
"optional": false
|
"optional": false
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
|
@ -2808,6 +2808,7 @@
|
|||||||
"value": "X",
|
"value": "X",
|
||||||
"optional": false
|
"optional": false
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
|
@ -158,6 +158,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
|
@ -212,6 +212,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
|
@ -274,6 +274,43 @@
|
|||||||
"value": "x",
|
"value": "x",
|
||||||
"optional": false
|
"optional": false
|
||||||
},
|
},
|
||||||
|
"thisParam": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"span": {
|
||||||
|
"start": 204,
|
||||||
|
"end": 213,
|
||||||
|
"ctxt": 0
|
||||||
|
},
|
||||||
|
"value": "this",
|
||||||
|
"optional": false,
|
||||||
|
"typeAnnotation": {
|
||||||
|
"type": "TsTypeAnnotation",
|
||||||
|
"span": {
|
||||||
|
"start": 208,
|
||||||
|
"end": 213,
|
||||||
|
"ctxt": 0
|
||||||
|
},
|
||||||
|
"typeAnnotation": {
|
||||||
|
"type": "TsTypeReference",
|
||||||
|
"span": {
|
||||||
|
"start": 210,
|
||||||
|
"end": 213,
|
||||||
|
"ctxt": 0
|
||||||
|
},
|
||||||
|
"typeName": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"span": {
|
||||||
|
"start": 210,
|
||||||
|
"end": 213,
|
||||||
|
"ctxt": 0
|
||||||
|
},
|
||||||
|
"value": "Foo",
|
||||||
|
"optional": false
|
||||||
|
},
|
||||||
|
"typeParams": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
@ -526,6 +563,7 @@
|
|||||||
"value": "x",
|
"value": "x",
|
||||||
"optional": false
|
"optional": false
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
@ -746,6 +784,43 @@
|
|||||||
"value": "x",
|
"value": "x",
|
||||||
"optional": false
|
"optional": false
|
||||||
},
|
},
|
||||||
|
"thisParam": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"span": {
|
||||||
|
"start": 441,
|
||||||
|
"end": 450,
|
||||||
|
"ctxt": 0
|
||||||
|
},
|
||||||
|
"value": "this",
|
||||||
|
"optional": false,
|
||||||
|
"typeAnnotation": {
|
||||||
|
"type": "TsTypeAnnotation",
|
||||||
|
"span": {
|
||||||
|
"start": 445,
|
||||||
|
"end": 450,
|
||||||
|
"ctxt": 0
|
||||||
|
},
|
||||||
|
"typeAnnotation": {
|
||||||
|
"type": "TsTypeReference",
|
||||||
|
"span": {
|
||||||
|
"start": 447,
|
||||||
|
"end": 450,
|
||||||
|
"ctxt": 0
|
||||||
|
},
|
||||||
|
"typeName": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"span": {
|
||||||
|
"start": 447,
|
||||||
|
"end": 450,
|
||||||
|
"ctxt": 0
|
||||||
|
},
|
||||||
|
"value": "Foo",
|
||||||
|
"optional": false
|
||||||
|
},
|
||||||
|
"typeParams": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
@ -982,6 +1057,17 @@
|
|||||||
"value": "x",
|
"value": "x",
|
||||||
"optional": false
|
"optional": false
|
||||||
},
|
},
|
||||||
|
"thisParam": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"span": {
|
||||||
|
"start": 580,
|
||||||
|
"end": 584,
|
||||||
|
"ctxt": 0
|
||||||
|
},
|
||||||
|
"value": "this",
|
||||||
|
"optional": false,
|
||||||
|
"typeAnnotation": null
|
||||||
|
},
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
|
@ -403,6 +403,43 @@
|
|||||||
"value": "x",
|
"value": "x",
|
||||||
"optional": false
|
"optional": false
|
||||||
},
|
},
|
||||||
|
"thisParam": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"span": {
|
||||||
|
"start": 267,
|
||||||
|
"end": 276,
|
||||||
|
"ctxt": 0
|
||||||
|
},
|
||||||
|
"value": "this",
|
||||||
|
"optional": false,
|
||||||
|
"typeAnnotation": {
|
||||||
|
"type": "TsTypeAnnotation",
|
||||||
|
"span": {
|
||||||
|
"start": 271,
|
||||||
|
"end": 276,
|
||||||
|
"ctxt": 0
|
||||||
|
},
|
||||||
|
"typeAnnotation": {
|
||||||
|
"type": "TsTypeReference",
|
||||||
|
"span": {
|
||||||
|
"start": 273,
|
||||||
|
"end": 276,
|
||||||
|
"ctxt": 0
|
||||||
|
},
|
||||||
|
"typeName": {
|
||||||
|
"type": "Identifier",
|
||||||
|
"span": {
|
||||||
|
"start": 273,
|
||||||
|
"end": 276,
|
||||||
|
"ctxt": 0
|
||||||
|
},
|
||||||
|
"value": "Bar",
|
||||||
|
"optional": false
|
||||||
|
},
|
||||||
|
"typeParams": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
|
@ -400,6 +400,7 @@
|
|||||||
"value": "e",
|
"value": "e",
|
||||||
"optional": false
|
"optional": false
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
|
@ -1050,6 +1050,7 @@
|
|||||||
"value": "prop",
|
"value": "prop",
|
||||||
"optional": false
|
"optional": false
|
||||||
},
|
},
|
||||||
|
"thisParam": null,
|
||||||
"param": {
|
"param": {
|
||||||
"type": "Identifier",
|
"type": "Identifier",
|
||||||
"span": {
|
"span": {
|
||||||
|
@ -23,7 +23,7 @@ impl_struct!(KeyValueProp, [key, value]);
|
|||||||
impl_struct!(AssignProp, [key, value]);
|
impl_struct!(AssignProp, [key, value]);
|
||||||
|
|
||||||
impl_struct!(GetterProp, [span, key, type_ann, body]);
|
impl_struct!(GetterProp, [span, key, type_ann, body]);
|
||||||
impl_struct!(SetterProp, [span, key, param, body]);
|
impl_struct!(SetterProp, [span, key, param, this_param, body]);
|
||||||
|
|
||||||
impl_struct!(MethodProp, [key, function]);
|
impl_struct!(MethodProp, [key, function]);
|
||||||
|
|
||||||
|
@ -1125,6 +1125,7 @@ impl<'a> VisitMut for Resolver<'a> {
|
|||||||
{
|
{
|
||||||
self.with_child(ScopeKind::Fn, |child| {
|
self.with_child(ScopeKind::Fn, |child| {
|
||||||
child.ident_type = IdentType::Binding;
|
child.ident_type = IdentType::Binding;
|
||||||
|
n.this_param.visit_mut_with(child);
|
||||||
n.param.visit_mut_with(child);
|
n.param.visit_mut_with(child);
|
||||||
n.body.visit_mut_with(child);
|
n.body.visit_mut_with(child);
|
||||||
});
|
});
|
||||||
|
@ -23,75 +23,16 @@ impl VisitMut for StripType {
|
|||||||
Box<TsTypeParamInstantiation>
|
Box<TsTypeParamInstantiation>
|
||||||
);
|
);
|
||||||
|
|
||||||
fn visit_mut_module_items(&mut self, n: &mut Vec<ModuleItem>) {
|
|
||||||
n.retain(should_retain_module_item);
|
|
||||||
n.visit_mut_children_with(self);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_mut_import_specifiers(&mut self, n: &mut Vec<ImportSpecifier>) {
|
|
||||||
n.retain(|s| !matches!(s, ImportSpecifier::Named(named) if named.is_type_only));
|
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_mut_export_specifiers(&mut self, n: &mut Vec<ExportSpecifier>) {
|
|
||||||
n.retain(|s| match s {
|
|
||||||
ExportSpecifier::Named(ExportNamedSpecifier { is_type_only, .. }) => !is_type_only,
|
|
||||||
_ => true,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_mut_stmts(&mut self, n: &mut Vec<Stmt>) {
|
|
||||||
n.retain(should_retain_stmt);
|
|
||||||
n.visit_mut_children_with(self);
|
|
||||||
}
|
|
||||||
|
|
||||||
// https://github.com/tc39/proposal-type-annotations#parameter-optionality
|
|
||||||
fn visit_mut_ident(&mut self, n: &mut Ident) {
|
|
||||||
n.optional = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_mut_array_pat(&mut self, n: &mut ArrayPat) {
|
fn visit_mut_array_pat(&mut self, n: &mut ArrayPat) {
|
||||||
n.visit_mut_children_with(self);
|
n.visit_mut_children_with(self);
|
||||||
n.optional = false;
|
n.optional = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_mut_object_pat(&mut self, pat: &mut ObjectPat) {
|
fn visit_mut_auto_accessor(&mut self, n: &mut AutoAccessor) {
|
||||||
pat.visit_mut_children_with(self);
|
n.type_ann = None;
|
||||||
pat.optional = false;
|
n.accessibility = None;
|
||||||
}
|
n.definite = false;
|
||||||
|
n.is_override = false;
|
||||||
fn visit_mut_expr(&mut self, n: &mut Expr) {
|
|
||||||
// https://github.com/tc39/proposal-type-annotations#type-assertions
|
|
||||||
// https://github.com/tc39/proposal-type-annotations#non-nullable-assertions
|
|
||||||
while let Expr::TsAs(TsAsExpr { expr, .. })
|
|
||||||
| Expr::TsNonNull(TsNonNullExpr { expr, .. })
|
|
||||||
| Expr::TsTypeAssertion(TsTypeAssertion { expr, .. })
|
|
||||||
| Expr::TsConstAssertion(TsConstAssertion { expr, .. })
|
|
||||||
| Expr::TsInstantiation(TsInstantiation { expr, .. })
|
|
||||||
| Expr::TsSatisfies(TsSatisfiesExpr { expr, .. }) = n
|
|
||||||
{
|
|
||||||
*n = *expr.take();
|
|
||||||
}
|
|
||||||
|
|
||||||
n.visit_mut_children_with(self);
|
|
||||||
}
|
|
||||||
|
|
||||||
// https://github.com/tc39/proposal-type-annotations#this-parameters
|
|
||||||
fn visit_mut_params(&mut self, n: &mut Vec<Param>) {
|
|
||||||
if n.first()
|
|
||||||
.filter(|param| {
|
|
||||||
matches!(
|
|
||||||
¶m.pat,
|
|
||||||
Pat::Ident(BindingIdent {
|
|
||||||
id: Ident { sym, .. },
|
|
||||||
..
|
|
||||||
}) if &**sym == "this"
|
|
||||||
)
|
|
||||||
})
|
|
||||||
.is_some()
|
|
||||||
{
|
|
||||||
n.drain(0..1);
|
|
||||||
}
|
|
||||||
|
|
||||||
n.visit_mut_children_with(self);
|
n.visit_mut_children_with(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,11 +71,6 @@ impl VisitMut for StripType {
|
|||||||
n.visit_mut_children_with(self);
|
n.visit_mut_children_with(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_mut_constructor(&mut self, n: &mut Constructor) {
|
|
||||||
n.accessibility = None;
|
|
||||||
n.visit_mut_children_with(self);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn visit_mut_class_method(&mut self, n: &mut ClassMethod) {
|
fn visit_mut_class_method(&mut self, n: &mut ClassMethod) {
|
||||||
n.accessibility = None;
|
n.accessibility = None;
|
||||||
n.is_override = false;
|
n.is_override = false;
|
||||||
@ -153,6 +89,73 @@ impl VisitMut for StripType {
|
|||||||
prop.visit_mut_children_with(self);
|
prop.visit_mut_children_with(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn visit_mut_constructor(&mut self, n: &mut Constructor) {
|
||||||
|
n.accessibility = None;
|
||||||
|
n.visit_mut_children_with(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn visit_mut_export_specifiers(&mut self, n: &mut Vec<ExportSpecifier>) {
|
||||||
|
n.retain(|s| match s {
|
||||||
|
ExportSpecifier::Named(ExportNamedSpecifier { is_type_only, .. }) => !is_type_only,
|
||||||
|
_ => true,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
fn visit_mut_expr(&mut self, n: &mut Expr) {
|
||||||
|
// https://github.com/tc39/proposal-type-annotations#type-assertions
|
||||||
|
// https://github.com/tc39/proposal-type-annotations#non-nullable-assertions
|
||||||
|
while let Expr::TsAs(TsAsExpr { expr, .. })
|
||||||
|
| Expr::TsNonNull(TsNonNullExpr { expr, .. })
|
||||||
|
| Expr::TsTypeAssertion(TsTypeAssertion { expr, .. })
|
||||||
|
| Expr::TsConstAssertion(TsConstAssertion { expr, .. })
|
||||||
|
| Expr::TsInstantiation(TsInstantiation { expr, .. })
|
||||||
|
| Expr::TsSatisfies(TsSatisfiesExpr { expr, .. }) = n
|
||||||
|
{
|
||||||
|
*n = *expr.take();
|
||||||
|
}
|
||||||
|
|
||||||
|
n.visit_mut_children_with(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://github.com/tc39/proposal-type-annotations#parameter-optionality
|
||||||
|
fn visit_mut_ident(&mut self, n: &mut Ident) {
|
||||||
|
n.optional = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn visit_mut_import_specifiers(&mut self, n: &mut Vec<ImportSpecifier>) {
|
||||||
|
n.retain(|s| !matches!(s, ImportSpecifier::Named(named) if named.is_type_only));
|
||||||
|
}
|
||||||
|
|
||||||
|
fn visit_mut_module_items(&mut self, n: &mut Vec<ModuleItem>) {
|
||||||
|
n.retain(should_retain_module_item);
|
||||||
|
n.visit_mut_children_with(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn visit_mut_object_pat(&mut self, pat: &mut ObjectPat) {
|
||||||
|
pat.visit_mut_children_with(self);
|
||||||
|
pat.optional = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://github.com/tc39/proposal-type-annotations#this-parameters
|
||||||
|
fn visit_mut_params(&mut self, n: &mut Vec<Param>) {
|
||||||
|
if n.first()
|
||||||
|
.filter(|param| {
|
||||||
|
matches!(
|
||||||
|
¶m.pat,
|
||||||
|
Pat::Ident(BindingIdent {
|
||||||
|
id: Ident { sym, .. },
|
||||||
|
..
|
||||||
|
}) if &**sym == "this"
|
||||||
|
)
|
||||||
|
})
|
||||||
|
.is_some()
|
||||||
|
{
|
||||||
|
n.drain(0..1);
|
||||||
|
}
|
||||||
|
|
||||||
|
n.visit_mut_children_with(self);
|
||||||
|
}
|
||||||
|
|
||||||
fn visit_mut_private_prop(&mut self, prop: &mut PrivateProp) {
|
fn visit_mut_private_prop(&mut self, prop: &mut PrivateProp) {
|
||||||
prop.readonly = false;
|
prop.readonly = false;
|
||||||
prop.is_override = false;
|
prop.is_override = false;
|
||||||
@ -162,11 +165,14 @@ impl VisitMut for StripType {
|
|||||||
prop.visit_mut_children_with(self);
|
prop.visit_mut_children_with(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_mut_auto_accessor(&mut self, n: &mut AutoAccessor) {
|
fn visit_mut_setter_prop(&mut self, n: &mut SetterProp) {
|
||||||
n.type_ann = None;
|
n.this_param = None;
|
||||||
n.accessibility = None;
|
|
||||||
n.definite = false;
|
n.visit_mut_children_with(self);
|
||||||
n.is_override = false;
|
}
|
||||||
|
|
||||||
|
fn visit_mut_stmts(&mut self, n: &mut Vec<Stmt>) {
|
||||||
|
n.retain(should_retain_stmt);
|
||||||
n.visit_mut_children_with(self);
|
n.visit_mut_children_with(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1379,6 +1379,7 @@ fn for_each_id_ref_in_expr(e: &Expr, op: &mut impl FnMut(&Ident)) {
|
|||||||
}
|
}
|
||||||
Prop::Setter(p) => {
|
Prop::Setter(p) => {
|
||||||
for_each_id_ref_in_prop_name(&p.key, op);
|
for_each_id_ref_in_prop_name(&p.key, op);
|
||||||
|
|
||||||
for_each_id_ref_in_pat(&p.param, op);
|
for_each_id_ref_in_pat(&p.param, op);
|
||||||
}
|
}
|
||||||
Prop::Method(p) => {
|
Prop::Method(p) => {
|
||||||
|
@ -665,6 +665,7 @@ fn extend_super(
|
|||||||
Prop::Setter(SetterProp {
|
Prop::Setter(SetterProp {
|
||||||
span: DUMMY_SP,
|
span: DUMMY_SP,
|
||||||
key: PropName::Ident(quote_ident!("_")),
|
key: PropName::Ident(quote_ident!("_")),
|
||||||
|
this_param: None,
|
||||||
param: value.clone().into(),
|
param: value.clone().into(),
|
||||||
body: Some(BlockStmt {
|
body: Some(BlockStmt {
|
||||||
span: DUMMY_SP,
|
span: DUMMY_SP,
|
||||||
@ -721,6 +722,7 @@ fn extend_super(
|
|||||||
Prop::Setter(SetterProp {
|
Prop::Setter(SetterProp {
|
||||||
span: DUMMY_SP,
|
span: DUMMY_SP,
|
||||||
key: PropName::Ident(quote_ident!("_")),
|
key: PropName::Ident(quote_ident!("_")),
|
||||||
|
this_param: None,
|
||||||
param: value.clone().into(),
|
param: value.clone().into(),
|
||||||
body: Some(BlockStmt {
|
body: Some(BlockStmt {
|
||||||
span: DUMMY_SP,
|
span: DUMMY_SP,
|
||||||
|
@ -1290,6 +1290,7 @@ define!({
|
|||||||
pub struct SetterProp {
|
pub struct SetterProp {
|
||||||
pub span: Span,
|
pub span: Span,
|
||||||
pub key: PropName,
|
pub key: PropName,
|
||||||
|
pub this_param: Option<Pat>,
|
||||||
pub param: Box<Pat>,
|
pub param: Box<Pat>,
|
||||||
pub body: Option<BlockStmt>,
|
pub body: Option<BlockStmt>,
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user