From a8a8ddc4fb1e471ce6e17090060fc5ccc4d61f6f Mon Sep 17 00:00:00 2001 From: eight04 Date: Fri, 14 Oct 2022 20:10:08 +0800 Subject: [PATCH] Fix: doesn't detect references in destructed object value --- packages/inject/src/index.js | 2 +- .../fixtures/shorthand-assignment/input.js | 2 + .../fixtures/shorthand-func-fallback/input.js | 4 ++ .../test/fixtures/shorthand-func/input.js | 4 ++ packages/inject/test/snapshots/test.js.md | 41 +++++++++++++----- packages/inject/test/snapshots/test.js.snap | Bin 895 -> 984 bytes packages/inject/test/test.js | 12 +++++ 7 files changed, 53 insertions(+), 12 deletions(-) create mode 100644 packages/inject/test/fixtures/shorthand-assignment/input.js create mode 100644 packages/inject/test/fixtures/shorthand-func-fallback/input.js create mode 100644 packages/inject/test/fixtures/shorthand-func/input.js diff --git a/packages/inject/src/index.js b/packages/inject/src/index.js index 655eb4f52..6077b5475 100644 --- a/packages/inject/src/index.js +++ b/packages/inject/src/index.js @@ -167,7 +167,7 @@ export default function inject(options) { // special case – shorthand properties. because node.key === node.value, // we can't differentiate once we've descended into the node - if (node.type === 'Property' && node.shorthand) { + if (node.type === 'Property' && node.shorthand && node.value.type === 'Identifier') { const { name } = node.key; handleReference(node, name, name); this.skip(); diff --git a/packages/inject/test/fixtures/shorthand-assignment/input.js b/packages/inject/test/fixtures/shorthand-assignment/input.js new file mode 100644 index 000000000..d827eefe7 --- /dev/null +++ b/packages/inject/test/fixtures/shorthand-assignment/input.js @@ -0,0 +1,2 @@ +const { Promise = "fallback" } = foo; + diff --git a/packages/inject/test/fixtures/shorthand-func-fallback/input.js b/packages/inject/test/fixtures/shorthand-func-fallback/input.js new file mode 100644 index 000000000..576d3632b --- /dev/null +++ b/packages/inject/test/fixtures/shorthand-func-fallback/input.js @@ -0,0 +1,4 @@ +function foo({bar = Promise}) { + console.log(bar); +} + diff --git a/packages/inject/test/fixtures/shorthand-func/input.js b/packages/inject/test/fixtures/shorthand-func/input.js new file mode 100644 index 000000000..77f2eb8aa --- /dev/null +++ b/packages/inject/test/fixtures/shorthand-func/input.js @@ -0,0 +1,4 @@ +function foo({Promise}) { + console.log(Promise); +} + diff --git a/packages/inject/test/snapshots/test.js.md b/packages/inject/test/snapshots/test.js.md index be5457c96..68e404b0c 100644 --- a/packages/inject/test/snapshots/test.js.md +++ b/packages/inject/test/snapshots/test.js.md @@ -37,17 +37,6 @@ Generated by [AVA](https://avajs.dev). });␊ ` -## escapes backslashes in module name - -> Snapshot 1 - - `import { default as $ } from 'slash\\\\back';␊ - ␊ - $(() => {␊ - console.log('ready');␊ - });␊ - ` - ## inserts a named import statement > Snapshot 1 @@ -103,6 +92,36 @@ Generated by [AVA](https://avajs.dev). polyfills.Promise.resolve().then(() => 'it works');␊ ` +## handles shorthand properties (as assignment) + +> Snapshot 1 + + `const { Promise = "fallback" } = foo;␊ + ␊ + ` + +## handles shorthand properties in function + +> Snapshot 1 + + `function foo({Promise}) {␊ + console.log(Promise);␊ + }␊ + ␊ + ` + +## handles shorthand properties in function (as fallback value) + +> Snapshot 1 + + `import { Promise as Promise } from 'es6-promise';␊ + ␊ + function foo({bar = Promise}) {␊ + console.log(bar);␊ + }␊ + ␊ + ` + ## handles redundant keys > Snapshot 1 diff --git a/packages/inject/test/snapshots/test.js.snap b/packages/inject/test/snapshots/test.js.snap index 8889cc1e71ad9fd686d303b18369a7d6215166e3..44b4d0a5b62e4f26a3241ce7c7f6cdee5a1231ef 100644 GIT binary patch literal 984 zcmV;}11J1JRzVHP8lC{AD#q@Fg8xIf;;r+N3bp z^pRa!)*p)q00000000BUl}nG)ND#*ZD}xKTG2>$P{ujU9vB8BR$6J1cnFYK zEg-gIm*dWKx;|@E?oDt2aa&!%kT~OFk5ZAop|FJ@i;J2H2tcsUse6P{4SkH z9UtRA@4*TyVKER2!B}LRC6Mw$S|;YXHkP5~7UrO=K*e*+w8hu&l7w6S=kp(WS9|X7 z(v{wim+sdFtL6rdY>%y3YV@21vy%eMGC1t__rh?YfXo)4Gu~0Q0Q+y7)WY1b;_bw(& zo(DSnaxk{3p@T?1qk^wnSlD1aBo2Y#u>8=&0sgw5S8EQj-j2AG;WL{Fe3A(@9Z|u! zEr&0L5fx9>k)WQ#1Dcz1Zv&6|6wH|smU4Lv%beQ`cX2;$<6i#Q>rA6iGl=cW2b1z2 zM-)@l(5GTy3j;XzPR6;G%T!2-V_jP8R~FF>U3f0*mT4oVLUGBC$XBZM4Hite3E29u zJ`hW-fOb2bhpY9dxq?FO!=l9Y(53OFj6acyCPW4cftIpV*RdlX_gdwQLij5!RBVM-OmZ4!;oh)xx(#q10%Hzh-S5|?VX8`- zRE5JWx?eVQ6s(*0h9J85{%uL-P46otUX{4fNhyNHg~V1#$i3d-Zg2;!Dr{{XTp)Xep{Pvb*|fOZW%YaD};WiBeka-+j!|axy6_ z^BGLJkgi!Xt69zsc6?V=i}UZAGl<4$mvluGqif^!@`gMbJ0z;RhE76m>6N;Rk$XzVoF#rmPuir#Kok&{@RSYKI3 z@c-PF2X9ozT!JNmv)^gvBuQK0u%o}aPjb~uToiP9kt1wEQ3TzW;?D G3IG5^hvNwV literal 895 zcmV-_1AzQNRzVt!yE80%sRFcQ&aJAAX1e5n%UpX{Acqy9V-*>(uXhT zq*HjfCN-gTBtRsXLZO_H)7)4m$brKtY9~oUPML9Z{5eU$!Hey4y$e16Idi^u@yw&j z;HdEcB-X`Tq}EJDu(Ma7odu(Qe?1Hb;?`|()E6Q)nvB9onMoK}gk%;BM*TT|YqHA) zAqkhEn3|+eJkG7jnRWJ`fYy*=$e9CjLylQ89!p)}2@O*`N%pEm_V9GFWIHg~KY)#a zORIo>2Mk(ZPfrIcoo;V?|9_4rmJ;(Q$!`ekxCKWI++(JZgdVOQ)`&Sm`*UyEx0iWponv`zr3) zZ@tcBO1*=zd$Tnze}G6%bVHxYLswX&VSULkH)@tjrD$kMi_L{av_n2TpLHjUl@qB! ziCcVEYRpX$jKKzCKB^AH%4p=>&dbB2`9|Y{L+;~YiCsgN#>+BZViUuN0uLoQ&Qev! zj(j|9mG4fKj`e@+zbhH&#J>ZSL1GSANc&(VjCtuKLe@ffnHD;B(rBT8M_IT&C@)9%A0_SEgaAOPf@OgB7}~OF9nLPwMwdcJX~|N#=d;FC@Mwaifz`1dYk4-)uy6 zFL3dU+Q+b^{6IQ!VC*gh%V75FSS%)mPCz>^{*EY2E6Z@2?(Y_9iuR49#h?jF(&o5a zDFxAeI1E_aD||FTjTU@UUi-BQpSR%dS8&%n6uYY%j~!RJtV_>J5x3D`)Uo<*rQ+9} z1x>m1iPA=IK6on9axyNQs56*?RKBr=Ga?5|9WSwNalWlMgJ?)@#xA0me9KqMOY&&w zkysO+pF5hB7U5n2%A;-w|B6IAM(Qw#qF}?n4DW(f!LHT)9A_Bs3Q13pQ;j-C9y7P< zV*T2Z?Wd(|Ibn5T>&kk9pL1Itytz2$6U_fBB<}IdcOY+tgN|PG&-bDcxecpF>Zr70 VnKyIq6Q~5? { compare(t, 'shorthand', { Promise: ['es6-promise', 'Promise'] }); }); +test('handles shorthand properties (as assignment)', (t) => { + compare(t, 'shorthand-assignment', { Promise: ['es6-promise', 'Promise'] }); +}); + +test('handles shorthand properties in function', (t) => { + compare(t, 'shorthand-func', { Promise: ['es6-promise', 'Promise'] }); +}); + +test('handles shorthand properties in function (as fallback value)', (t) => { + compare(t, 'shorthand-func-fallback', { Promise: ['es6-promise', 'Promise'] }); +}); + test('handles redundant keys', (t) => { compare(t, 'redundant-keys', { Buffer: 'Buffer',