mirror of
https://github.com/danbulant/oxc
synced 2026-05-19 12:19:15 +00:00
parent
9cc960e591
commit
20c7bf7835
8 changed files with 44 additions and 12 deletions
|
|
@ -974,7 +974,7 @@ pub struct ArrayAssignmentTarget<'a> {
|
|||
#[cfg_attr(feature = "serde", serde(flatten))]
|
||||
pub span: Span,
|
||||
pub elements: Vec<'a, Option<AssignmentTargetMaybeDefault<'a>>>,
|
||||
pub rest: Option<AssignmentTarget<'a>>,
|
||||
pub rest: Option<AssignmentTargetRest<'a>>,
|
||||
pub trailing_comma: Option<Span>,
|
||||
}
|
||||
|
||||
|
|
@ -994,7 +994,7 @@ pub struct ObjectAssignmentTarget<'a> {
|
|||
#[cfg_attr(feature = "serde", serde(flatten))]
|
||||
pub span: Span,
|
||||
pub properties: Vec<'a, AssignmentTargetProperty<'a>>,
|
||||
pub rest: Option<AssignmentTarget<'a>>,
|
||||
pub rest: Option<AssignmentTargetRest<'a>>,
|
||||
}
|
||||
|
||||
impl<'a> ObjectAssignmentTarget<'a> {
|
||||
|
|
@ -1007,6 +1007,15 @@ impl<'a> ObjectAssignmentTarget<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Hash)]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize), serde(tag = "type"))]
|
||||
#[cfg_attr(all(feature = "serde", feature = "wasm"), derive(tsify::Tsify))]
|
||||
pub struct AssignmentTargetRest<'a> {
|
||||
#[cfg_attr(feature = "serde", serde(flatten))]
|
||||
pub span: Span,
|
||||
pub target: AssignmentTarget<'a>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Hash)]
|
||||
#[cfg_attr(feature = "serde", derive(Serialize), serde(untagged))]
|
||||
#[cfg_attr(all(feature = "serde", feature = "wasm"), derive(tsify::Tsify))]
|
||||
|
|
|
|||
|
|
@ -948,7 +948,7 @@ pub trait Visit<'a>: Sized {
|
|||
self.visit_assignment_target_maybe_default(element);
|
||||
}
|
||||
if let Some(target) = &target.rest {
|
||||
self.visit_assignment_target(target);
|
||||
self.visit_assignment_target_rest(target);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -976,7 +976,7 @@ pub trait Visit<'a>: Sized {
|
|||
self.visit_assignment_target_property(property);
|
||||
}
|
||||
if let Some(target) = &target.rest {
|
||||
self.visit_assignment_target(target);
|
||||
self.visit_assignment_target_rest(target);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1009,6 +1009,10 @@ pub trait Visit<'a>: Sized {
|
|||
self.visit_assignment_target_maybe_default(&property.binding);
|
||||
}
|
||||
|
||||
fn visit_assignment_target_rest(&mut self, rest: &AssignmentTargetRest<'a>) {
|
||||
self.visit_assignment_target(&rest.target);
|
||||
}
|
||||
|
||||
/* ---------- Expression ---------- */
|
||||
|
||||
fn visit_jsx_element(&mut self, elem: &JSXElement<'a>) {
|
||||
|
|
|
|||
|
|
@ -935,7 +935,7 @@ pub trait VisitMut<'a>: Sized {
|
|||
self.visit_assignment_target_maybe_default(element);
|
||||
}
|
||||
if let Some(target) = &mut target.rest {
|
||||
self.visit_assignment_target(target);
|
||||
self.visit_assignment_target_rest(target);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -969,7 +969,7 @@ pub trait VisitMut<'a>: Sized {
|
|||
self.visit_assignment_target_property(property);
|
||||
}
|
||||
if let Some(target) = &mut target.rest {
|
||||
self.visit_assignment_target(target);
|
||||
self.visit_assignment_target_rest(target);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1002,6 +1002,10 @@ pub trait VisitMut<'a>: Sized {
|
|||
self.visit_assignment_target_maybe_default(&mut property.binding);
|
||||
}
|
||||
|
||||
fn visit_assignment_target_rest(&mut self, rest: &mut AssignmentTargetRest<'a>) {
|
||||
self.visit_assignment_target(&mut rest.target);
|
||||
}
|
||||
|
||||
/* ---------- Expression ---------- */
|
||||
|
||||
fn visit_jsx_element(&mut self, elem: &mut JSXElement<'a>) {
|
||||
|
|
|
|||
|
|
@ -1800,7 +1800,6 @@ impl<'a, const MINIFY: bool> Gen<MINIFY> for ArrayAssignmentTarget<'a> {
|
|||
p.print_comma();
|
||||
}
|
||||
p.add_source_mapping(self.span.start);
|
||||
p.print_ellipsis();
|
||||
target.gen(p, ctx);
|
||||
}
|
||||
if self.trailing_comma.is_some() {
|
||||
|
|
@ -1829,7 +1828,6 @@ impl<'a, const MINIFY: bool> Gen<MINIFY> for ObjectAssignmentTarget<'a> {
|
|||
p.print_comma();
|
||||
}
|
||||
p.add_source_mapping(self.span.start);
|
||||
p.print_ellipsis();
|
||||
target.gen(p, ctx);
|
||||
}
|
||||
p.print(b'}');
|
||||
|
|
@ -1893,6 +1891,13 @@ impl<'a, const MINIFY: bool> Gen<MINIFY> for AssignmentTargetPropertyProperty<'a
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a, const MINIFY: bool> Gen<MINIFY> for AssignmentTargetRest<'a> {
|
||||
fn gen(&self, p: &mut Codegen<{ MINIFY }>, ctx: Context) {
|
||||
p.print_ellipsis();
|
||||
self.target.gen(p, ctx);
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, const MINIFY: bool> GenExpr<MINIFY> for SequenceExpression<'a> {
|
||||
fn gen_expr(&self, p: &mut Codegen<{ MINIFY }>, precedence: Precedence, _ctx: Context) {
|
||||
p.wrap(precedence > self.precedence(), |p| {
|
||||
|
|
|
|||
|
|
@ -78,7 +78,10 @@ impl<'a> CoverGrammar<'a, ArrayExpression<'a>> for ArrayAssignmentTarget<'a> {
|
|||
}
|
||||
ArrayExpressionElement::SpreadElement(elem) => {
|
||||
if i == len - 1 {
|
||||
rest = Some(AssignmentTarget::cover(elem.unbox().argument, p)?);
|
||||
rest = Some(AssignmentTargetRest {
|
||||
span: elem.span,
|
||||
target: AssignmentTarget::cover(elem.unbox().argument, p)?,
|
||||
});
|
||||
if let Some(span) = expr.trailing_comma {
|
||||
p.error(diagnostics::BindingRestElementTrailingComma(span));
|
||||
}
|
||||
|
|
@ -134,7 +137,10 @@ impl<'a> CoverGrammar<'a, ObjectExpression<'a>> for ObjectAssignmentTarget<'a> {
|
|||
}
|
||||
ObjectPropertyKind::SpreadProperty(spread) => {
|
||||
if i == len - 1 {
|
||||
rest = Some(AssignmentTarget::cover(spread.unbox().argument, p)?);
|
||||
rest = Some(AssignmentTargetRest {
|
||||
span: spread.span,
|
||||
target: AssignmentTarget::cover(spread.unbox().argument, p)?,
|
||||
});
|
||||
} else {
|
||||
return Err(diagnostics::SpreadLastElement(spread.span).into());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -197,7 +197,6 @@ fn print_array_elements<'a>(p: &mut Prettier<'a>, array: &Array<'a, '_>) -> Doc<
|
|||
if let Some(rest) = &array_pat.rest {
|
||||
parts.push(ss!(","));
|
||||
parts.push(line!());
|
||||
parts.push(ss!("..."));
|
||||
parts.push(rest.format(p));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1824,6 +1824,12 @@ impl<'a> Format<'a> for AssignmentTargetPropertyProperty<'a> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<'a> Format<'a> for AssignmentTargetRest<'a> {
|
||||
fn format(&self, p: &mut Prettier<'a>) -> Doc<'a> {
|
||||
array![p, ss!("..."), self.target.format(p)]
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Format<'a> for SequenceExpression<'a> {
|
||||
fn format(&self, p: &mut Prettier<'a>) -> Doc<'a> {
|
||||
wrap!(p, self, SequenceExpression, {
|
||||
|
|
|
|||
|
|
@ -99,7 +99,6 @@ pub(super) fn print_object_properties<'a>(
|
|||
ObjectLike::Expression(_) => {}
|
||||
ObjectLike::AssignmentTarget(target) => {
|
||||
if let Some(rest) = &target.rest {
|
||||
indent_parts.push(ss!("..."));
|
||||
indent_parts.push(rest.format(p));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue