refactor(transformer/decorators): optimizing code with ast.private_field (#2249)

This commit is contained in:
Dunqing 2024-02-01 22:30:48 +08:00 committed by GitHub
parent f4674f33b2
commit de6d2f5dc5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 102 additions and 99 deletions

View file

@ -599,6 +599,21 @@ impl<'a> AstBuilder<'a> {
self.member_expression(self.static_member(span, object, property, optional)) self.member_expression(self.static_member(span, object, property, optional))
} }
pub fn private_field(
&self,
span: Span,
object: Expression<'a>,
field: PrivateIdentifier,
optional: bool,
) -> MemberExpression<'a> {
MemberExpression::PrivateFieldExpression(PrivateFieldExpression {
span,
object,
field,
optional,
})
}
pub fn private_field_expression( pub fn private_field_expression(
&self, &self,
span: Span, span: Span,
@ -606,12 +621,7 @@ impl<'a> AstBuilder<'a> {
field: PrivateIdentifier, field: PrivateIdentifier,
optional: bool, optional: bool,
) -> Expression<'a> { ) -> Expression<'a> {
self.member_expression(MemberExpression::PrivateFieldExpression(PrivateFieldExpression { self.member_expression(self.private_field(span, object, field, optional))
span,
object,
field,
optional,
}))
} }
pub fn new_expression( pub fn new_expression(

View file

@ -371,8 +371,7 @@ impl<'a> Decorators<'a> {
} }
} else if has_member_decorator { } else if has_member_decorator {
// https://github.com/babel/babel/blob/eccbd203383487f6957dcf086aa83d773691560b/packages/babel-helpers/src/helpers/applyDecs2305.ts#L7-L45 // https://github.com/babel/babel/blob/eccbd203383487f6957dcf086aa83d773691560b/packages/babel-helpers/src/helpers/applyDecs2305.ts#L7-L45
let get_decorator_info = let get_decorator_info = |key: &PropertyKey<'a>,
|key: &PropertyKey<'a>,
flag: u8, flag: u8,
decorator: &Decorator<'a>, decorator: &Decorator<'a>,
ast: &AstBuilder<'a>| { ast: &AstBuilder<'a>| {
@ -410,7 +409,7 @@ impl<'a> Decorators<'a> {
false, false,
ast.new_vec(), ast.new_vec(),
)); ));
let private_identifier = ast.private_field_expression( let private_field = ast.private_field(
SPAN, SPAN,
ast.identifier_reference_expression(IdentifierReference::new( ast.identifier_reference_expression(IdentifierReference::new(
SPAN, SPAN,
@ -437,7 +436,7 @@ impl<'a> Decorators<'a> {
ast.new_vec(), ast.new_vec(),
ast.new_vec_single(ast.expression_statement( ast.new_vec_single(ast.expression_statement(
SPAN, SPAN,
ast.copy(&private_identifier), ast.member_expression(ast.copy(&private_field)),
)), )),
), ),
None, None,
@ -465,7 +464,7 @@ impl<'a> Decorators<'a> {
let params = ast.formal_parameters( let params = ast.formal_parameters(
SPAN, SPAN,
FormalParameterKind::ArrowFormalParameters, FormalParameterKind::ArrowFormalParameters,
ast.copy(&items), items,
None, None,
); );
@ -479,25 +478,19 @@ impl<'a> Decorators<'a> {
ast.function_body( ast.function_body(
SPAN, SPAN,
ast.new_vec(), ast.new_vec(),
ast.new_vec_single( ast.new_vec_single(ast.expression_statement(
ast.expression_statement(
SPAN, SPAN,
ast.assignment_expression( ast.assignment_expression(
SPAN, SPAN,
AssignmentOperator::Assign, AssignmentOperator::Assign,
ast.simple_assignment_target_member_expression( ast.simple_assignment_target_member_expression(
ast.copy( private_field,
private_identifier
.get_member_expr()
.unwrap(),
),
), ),
ast.identifier_reference_expression( ast.identifier_reference_expression(
IdentifierReference::new(SPAN, "v".into()), IdentifierReference::new(SPAN, "v".into()),
), ),
), ),
), )),
),
), ),
None, None,
None, None,