From 27d0f33ac761e42951fa6aa16d41d8565ad89796 Mon Sep 17 00:00:00 2001 From: Brian Donovan Date: Fri, 18 Dec 2015 11:13:50 -0800 Subject: [PATCH] Ensure references inside default destructuring values count. Fixes #364. --- src/Statement.js | 2 +- .../object-destructuring-default-values/_config.js | 3 +++ .../_expected/amd.js | 9 +++++++++ .../_expected/cjs.js | 7 +++++++ .../_expected/es6.js | 5 +++++ .../_expected/iife.js | 9 +++++++++ .../_expected/umd.js | 13 +++++++++++++ .../object-destructuring-default-values/main.js | 5 +++++ 8 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 test/form/object-destructuring-default-values/_config.js create mode 100644 test/form/object-destructuring-default-values/_expected/amd.js create mode 100644 test/form/object-destructuring-default-values/_expected/cjs.js create mode 100644 test/form/object-destructuring-default-values/_expected/es6.js create mode 100644 test/form/object-destructuring-default-values/_expected/iife.js create mode 100644 test/form/object-destructuring-default-values/_expected/umd.js create mode 100644 test/form/object-destructuring-default-values/main.js diff --git a/src/Statement.js b/src/Statement.js index a9efc49..34b87ae 100644 --- a/src/Statement.js +++ b/src/Statement.js @@ -86,7 +86,7 @@ export default class Statement { // 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 && parent.type !== 'ObjectPattern' ) { const reference = new Reference( node.key, scope ); reference.isShorthandProperty = true; // TODO feels a bit kludgy references.push( reference ); diff --git a/test/form/object-destructuring-default-values/_config.js b/test/form/object-destructuring-default-values/_config.js new file mode 100644 index 0000000..18347b6 --- /dev/null +++ b/test/form/object-destructuring-default-values/_config.js @@ -0,0 +1,3 @@ +module.exports = { + description: 'object destructuring default values are preserved' +}; diff --git a/test/form/object-destructuring-default-values/_expected/amd.js b/test/form/object-destructuring-default-values/_expected/amd.js new file mode 100644 index 0000000..e3d2006 --- /dev/null +++ b/test/form/object-destructuring-default-values/_expected/amd.js @@ -0,0 +1,9 @@ +define(function () { 'use strict'; + + const a = 1; + const b = 2; + const { c = a } = {}; + const [ d = b ] = []; + console.log(c, d); + +}); \ No newline at end of file diff --git a/test/form/object-destructuring-default-values/_expected/cjs.js b/test/form/object-destructuring-default-values/_expected/cjs.js new file mode 100644 index 0000000..b6918f0 --- /dev/null +++ b/test/form/object-destructuring-default-values/_expected/cjs.js @@ -0,0 +1,7 @@ +'use strict'; + +const a = 1; +const b = 2; +const { c = a } = {}; +const [ d = b ] = []; +console.log(c, d); \ No newline at end of file diff --git a/test/form/object-destructuring-default-values/_expected/es6.js b/test/form/object-destructuring-default-values/_expected/es6.js new file mode 100644 index 0000000..7dda542 --- /dev/null +++ b/test/form/object-destructuring-default-values/_expected/es6.js @@ -0,0 +1,5 @@ +const a = 1; +const b = 2; +const { c = a } = {}; +const [ d = b ] = []; +console.log(c, d); diff --git a/test/form/object-destructuring-default-values/_expected/iife.js b/test/form/object-destructuring-default-values/_expected/iife.js new file mode 100644 index 0000000..643b120 --- /dev/null +++ b/test/form/object-destructuring-default-values/_expected/iife.js @@ -0,0 +1,9 @@ +(function () { 'use strict'; + + const a = 1; + const b = 2; + const { c = a } = {}; + const [ d = b ] = []; + console.log(c, d); + +})(); \ No newline at end of file diff --git a/test/form/object-destructuring-default-values/_expected/umd.js b/test/form/object-destructuring-default-values/_expected/umd.js new file mode 100644 index 0000000..e13c8f3 --- /dev/null +++ b/test/form/object-destructuring-default-values/_expected/umd.js @@ -0,0 +1,13 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory() : + typeof define === 'function' && define.amd ? define(factory) : + factory(); +}(this, function () { 'use strict'; + + const a = 1; + const b = 2; + const { c = a } = {}; + const [ d = b ] = []; + console.log(c, d); + +})); \ No newline at end of file diff --git a/test/form/object-destructuring-default-values/main.js b/test/form/object-destructuring-default-values/main.js new file mode 100644 index 0000000..7dda542 --- /dev/null +++ b/test/form/object-destructuring-default-values/main.js @@ -0,0 +1,5 @@ +const a = 1; +const b = 2; +const { c = a } = {}; +const [ d = b ] = []; +console.log(c, d);