Skip to content

Commit 08a99dd

Browse files
authored
[core][rewriter] fix dpsc wrapget (#3)
* fmt * fix
1 parent 215fd12 commit 08a99dd

File tree

5 files changed

+197
-176
lines changed

5 files changed

+197
-176
lines changed

rewriter/js/src/changes.rs

Lines changed: 45 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ use crate::{
1717
rewrite::Rewrite,
1818
};
1919

20-
2120
macro_rules! change {
2221
($span:expr, $($ty:tt)*) => {
2322
$crate::changes::JsChange::new($span, $crate::changes::JsChangeType::$($ty)*)
@@ -28,37 +27,45 @@ pub(crate) use change;
2827
#[derive(Debug, PartialEq, Eq)]
2928
pub enum JsChangeType<'alloc: 'data, 'data> {
3029
/// insert `${cfg.wrapfn}(`
31-
WrapFnLeft { enclose: bool },
30+
WrapFnLeft {
31+
enclose: bool,
32+
},
3233
/// insert `)`
33-
WrapFnRight { enclose: bool },
34+
WrapFnRight {
35+
enclose: bool,
36+
},
3437

3538
WrapGetLeft {
36-
ident: Atom<'data>,
37-
enclose: bool,
39+
ident: Atom<'data>,
40+
enclose: bool,
3841
},
3942
WrapGetComputedLeft {
40-
enclose: bool,
41-
},
43+
enclose: bool,
44+
},
4245
WrapGetRight {
43-
enclose: bool,
44-
},
46+
enclose: bool,
47+
},
4548

46-
WrapSet {
47-
ident: Atom<'data>,
48-
propspan: Span
49-
},
50-
WrapSetComputed,
49+
WrapSet {
50+
ident: Atom<'data>,
51+
propspan: Span,
52+
},
53+
WrapSetComputed,
5154

5255
/// insert `${cfg.setrealmfn}({}).`
5356
SetRealmFn,
5457
/// insert `$scramerr(ident);`
55-
ScramErrFn { ident: Atom<'data> },
58+
ScramErrFn {
59+
ident: Atom<'data>,
60+
},
5661
/// insert `$scramitize(`
5762
ScramitizeFn,
5863
/// insert `eval(${cfg.rewritefn}(`
5964
EvalRewriteFn,
6065
/// insert `: ${cfg.wrapfn}(ident)`
61-
ShorthandObj { ident: Atom<'data> },
66+
ShorthandObj {
67+
ident: Atom<'data>,
68+
},
6269
/// insert scramtag
6370
SourceTag,
6471

@@ -73,10 +80,15 @@ pub enum JsChangeType<'alloc: 'data, 'data> {
7380
},
7481

7582
/// insert `)`
76-
ClosingParen { semi: bool, replace: bool },
83+
ClosingParen {
84+
semi: bool,
85+
replace: bool,
86+
},
7787

7888
/// replace span with text
79-
Replace { text: &'alloc str },
89+
Replace {
90+
text: &'alloc str,
91+
},
8092
/// replace span with ""
8193
Delete,
8294
}
@@ -105,7 +117,7 @@ impl<'alloc: 'data, 'data> Transform<'data> for JsChange<'alloc, 'data> {
105117
(cfg, flags): &Self::ToLowLevelData,
106118
offset: i32,
107119
) -> TransformLL<'data> {
108-
dbg!(&self);
120+
dbg!(&self);
109121
use JsChangeType as Ty;
110122
use TransformLL as LL;
111123
match self.ty {
@@ -119,33 +131,25 @@ impl<'alloc: 'data, 'data> Transform<'data> for JsChange<'alloc, 'data> {
119131
} else {
120132
transforms![")"]
121133
}),
122-
Ty::WrapGetLeft {
123-
ident,
124-
enclose,
125-
} => LL::insert(if enclose {
126-
transforms!["(", &cfg.wrapgetbase, ident, "("]
134+
Ty::WrapGetLeft { ident, enclose } => LL::insert(if enclose {
135+
transforms!["(", &cfg.wrapgetbase, ident, "("]
127136
} else {
128-
transforms![&cfg.wrapgetbase, ident, "("]
137+
transforms![&cfg.wrapgetbase, ident, "("]
129138
}),
130139
Ty::WrapGetComputedLeft { enclose } => LL::insert(if enclose {
131-
transforms!["(", &cfg.wrapcomputedgetfn, "("]
132-
} else {
133-
transforms![&cfg.wrapcomputedgetfn, "("]
134-
}),
140+
transforms!["(", &cfg.wrapcomputedgetfn, "("]
141+
} else {
142+
transforms![&cfg.wrapcomputedgetfn, "("]
143+
}),
135144
Ty::WrapGetRight { enclose } => LL::replace(if enclose {
136145
transforms!["))"]
137146
} else {
138147
transforms![")"]
139148
}),
140-
Ty::WrapSet { ident, propspan } => LL::insert(transforms![
141-
&cfg.wrapsetbase,
142-
ident,
143-
"("
144-
]),
145-
Ty::WrapSetComputed => LL::insert(transforms![
146-
&cfg.wrapcomputedsetfn,
147-
"("
148-
]),
149+
Ty::WrapSet { ident, propspan } => {
150+
LL::insert(transforms![&cfg.wrapsetbase, ident, "("])
151+
}
152+
Ty::WrapSetComputed => LL::insert(transforms![&cfg.wrapcomputedsetfn, "("]),
149153
Ty::SetRealmFn => LL::insert(transforms![&cfg.setrealmfn, "({})."]),
150154
Ty::ScramErrFn { ident } => LL::insert(transforms!["$scramerr(", ident, ");"]),
151155
Ty::ScramitizeFn => LL::insert(transforms![" $scramitize("]),
@@ -205,6 +209,8 @@ impl Ord for JsChange<'_, '_> {
205209
Ordering::Equal => match (&self.ty, &other.ty) {
206210
(Ty::ScramErrFn { .. }, _) => Ordering::Less,
207211
(_, Ty::ScramErrFn { .. }) => Ordering::Greater,
212+
(Ty::WrapFnRight { .. }, _) => Ordering::Less,
213+
(_, Ty::WrapFnRight { .. }) => Ordering::Greater,
208214
_ => Ordering::Equal,
209215
},
210216
x => x,
@@ -226,6 +232,7 @@ impl<'alloc: 'data, 'data> JsChanges<'alloc, 'data> {
226232

227233
#[inline]
228234
pub fn add(&mut self, rewrite: Rewrite<'alloc, 'data>) {
235+
dbg!(&rewrite);
229236
self.inner.add(rewrite.into_inner());
230237
}
231238

rewriter/js/src/rewrite.rs

Lines changed: 62 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -27,31 +27,31 @@ pub(crate) enum RewriteType<'alloc: 'data, 'data> {
2727
/// `cfg.metafn("cfg.base")`
2828
MetaFn,
2929

30-
/// `window.location` -> cfg.wraplocation(window)
30+
/// `window.attr` -> cfg.wrapattr(window)
3131
WrapGet {
32-
ident: Atom<'data>,
33-
propspan: Span,
34-
enclose: bool,
32+
ident: Atom<'data>,
33+
propspan: Span,
34+
enclose: bool,
3535
},
36-
/// `window["location"]` -> cfg.wrapgetcomputed(window, "location")
36+
/// `window["attr"]` -> cfg.wrapgetcomputed(window, "attr")
3737
WrapGetComputed {
38-
leftspan: Span,
39-
propspan: Span,
40-
enclose: bool,
38+
leftspan: Span,
39+
propspan: Span,
40+
enclose: bool,
4141
},
42-
/// `window.location` -> cfg.wraplocation(window)
42+
/// `window.attr` -> cfg.wrapattr(window)
4343
WrapSet {
44-
ident: Atom<'data>,
45-
propspan: Span,
46-
leftspan: Span,
47-
rightspan: Span,
44+
ident: Atom<'data>,
45+
propspan: Span,
46+
leftspan: Span,
47+
rightspan: Span,
4848
},
49-
/// `cfg.wrapcomputedsetfn(window, "location", t)`
49+
/// `cfg.wrapcomputedsetfn(window, "attr", t)`
5050
WrapSetComputed {
51-
propspan: Span,
52-
leftspan: Span,
53-
rightspan: Span,
54-
},
51+
propspan: Span,
52+
leftspan: Span,
53+
rightspan: Span,
54+
},
5555
// dead code only if debug is disabled
5656
#[allow(dead_code)]
5757
/// `$scramerr(name)`
@@ -84,6 +84,7 @@ pub(crate) enum RewriteType<'alloc: 'data, 'data> {
8484
Delete,
8585
}
8686

87+
#[derive(Debug)]
8788
pub(crate) struct Rewrite<'alloc, 'data> {
8889
span: Span,
8990
ty: RewriteType<'alloc, 'data>,
@@ -114,6 +115,9 @@ impl<'alloc: 'data, 'data> RewriteType<'alloc, 'data> {
114115
($span1:ident $span2:ident end) => {
115116
Span::new($span1.end, $span2.end)
116117
};
118+
($span1:ident $span2:ident between) => {
119+
Span::new($span1.end, $span2.start)
120+
};
117121
}
118122

119123
match self {
@@ -122,59 +126,65 @@ impl<'alloc: 'data, 'data> RewriteType<'alloc, 'data> {
122126
change!(span!(end), WrapFnRight { enclose }),
123127
],
124128
Self::WrapGet {
125-
ident,
126-
propspan,
127-
enclose,
129+
ident,
130+
propspan,
131+
enclose,
128132
} => smallvec![
129-
change!(span!(start), WrapGetLeft {
130-
ident,
131-
enclose,
132-
}),
133-
change!(propspan, Delete),
134-
change!(Span::new(propspan.start-1, propspan.start), Delete),
135-
change!(Span::new(propspan.end, propspan.end), WrapGetRight {
136-
enclose,
137-
}),
133+
change!(span!(start), WrapGetLeft { ident, enclose }),
134+
change!(propspan.expand_left(1), WrapGetRight { enclose }),
138135
],
139-
Self::WrapGetComputed { leftspan, propspan, enclose } => smallvec![
140-
change!(span!(start), WrapGetComputedLeft {
141-
enclose
142-
}),
136+
Self::WrapGetComputed {
137+
leftspan,
138+
propspan,
139+
enclose,
140+
} => smallvec![
141+
change!(span!(start), WrapGetComputedLeft { enclose }),
143142
// replace the bracket with ,
144-
change!(Span::new(leftspan.end, propspan.start), Replace { text: "," }),
143+
change!(span!(leftspan propspan between), Replace { text: "," }),
145144
// replace the other bracket with )
146-
change!(Span::new(propspan.end, propspan.end + 1), ClosingParen { semi: false, replace: true }),
147-
145+
change!(
146+
propspan.expand_right(1),
147+
ClosingParen {
148+
semi: false,
149+
replace: true
150+
}
151+
),
148152
],
149-
Self::WrapSet { ident, propspan, leftspan, rightspan } => smallvec![
150-
change!(span!(start), WrapSet {
151-
ident,
152-
propspan,
153-
}),
154-
change!(propspan, Delete),
155-
change!(Span::new(leftspan.end, rightspan.start), Replace { text: "," }),
156-
change!(
153+
Self::WrapSet {
154+
ident,
155+
propspan,
156+
leftspan,
157+
rightspan,
158+
} => smallvec![
159+
change!(span!(start), WrapSet { ident, propspan }),
160+
change!(propspan, Delete),
161+
change!(span!(leftspan rightspan between), Replace { text: "," }),
162+
change!(
157163
span!(end),
158164
ClosingParen {
159165
semi: false,
160166
replace: true
161167
}
162168
)
163-
],
164-
RewriteType::WrapSetComputed { leftspan, rightspan, propspan } => smallvec![
165-
change!(span!(start), WrapSetComputed),
166-
// replace the bracket with ,
167-
change!(Span::new(leftspan.end, propspan.start), Replace { text: "," }),
169+
],
170+
RewriteType::WrapSetComputed {
171+
leftspan,
172+
rightspan,
173+
propspan,
174+
} => smallvec![
175+
change!(span!(start), WrapSetComputed),
176+
// replace the bracket with ,
177+
change!(span!(leftspan propspan between), Replace { text: "," }),
168178
// replace the other bracket with another ,
169-
change!(Span::new(propspan.end, rightspan.start), Replace { text: "," }),
179+
change!(span!(propspan rightspan between), Replace { text: "," }),
170180
change!(
171181
span!(end),
172182
ClosingParen {
173183
semi: false,
174184
replace: true
175185
}
176186
)
177-
],
187+
],
178188
Self::SetRealmFn => smallvec![change!(span, SetRealmFn)],
179189
Self::ImportFn => smallvec![change!(span, ImportFn)],
180190
Self::MetaFn => smallvec![change!(span, MetaFn)],

0 commit comments

Comments
 (0)