From 1b0454ba8e51af147b3c2c5510ab73837c48c369 Mon Sep 17 00:00:00 2001 From: Rich-Harris Date: Sat, 16 May 2015 23:04:04 -0400 Subject: [PATCH] rewrite member expressions correctly --- src/Bundle/index.js | 7 ------- src/rollup.js | 2 +- src/utils/replaceIdentifiers.js | 15 ++++++++++----- .../samples/rewrite-member-expressions/_config.js | 3 +++ .../getLengthOfOtherQueue.js | 5 +++++ test/samples/rewrite-member-expressions/main.js | 7 +++++++ .../rewrite-member-expressions/mainQueue.js | 9 +++++++++ 7 files changed, 35 insertions(+), 13 deletions(-) create mode 100644 test/samples/rewrite-member-expressions/_config.js create mode 100644 test/samples/rewrite-member-expressions/getLengthOfOtherQueue.js create mode 100644 test/samples/rewrite-member-expressions/main.js create mode 100644 test/samples/rewrite-member-expressions/mainQueue.js diff --git a/src/Bundle/index.js b/src/Bundle/index.js index bac6c80..a6f573b 100644 --- a/src/Bundle/index.js +++ b/src/Bundle/index.js @@ -28,13 +28,6 @@ export default class Bundle { this.externalModules = []; } - collect () { - return this.build() - .then( () => { - return this; - }); - } - fetchModule ( path ) { if ( !has( this.modulePromises, path ) ) { this.modulePromises[ path ] = readFile( path, { encoding: 'utf-8' }) diff --git a/src/rollup.js b/src/rollup.js index e99709a..e5b241a 100644 --- a/src/rollup.js +++ b/src/rollup.js @@ -11,7 +11,7 @@ export function rollup ( entry, options = {} ) { base: options.base || process.cwd() }); - return bundle.collect().then( () => { + return bundle.build().then( () => { return { generate: options => bundle.generate( options ), write: ( dest, options ) => { diff --git a/src/utils/replaceIdentifiers.js b/src/utils/replaceIdentifiers.js index 7b4f003..47b5ab5 100644 --- a/src/utils/replaceIdentifiers.js +++ b/src/utils/replaceIdentifiers.js @@ -29,15 +29,20 @@ export default function replaceIdentifiers ( statement, snippet, names ) { return this.skip(); } + names = newNames; replacementStack.push( newNames ); } - if ( node.type === 'Identifier' && parent.type !== 'MemberExpression' ) { - const name = has( names, node.name ) && names[ node.name ]; + // We want to rewrite identifiers (that aren't property names) + if ( node.type !== 'Identifier' ) return; + if ( parent.type === 'MemberExpression' && node !== parent.object ) return; + if ( parent.type === 'Property' && node !== parent.value ) return; + // TODO others...? - if ( name && name !== node.name ) { - snippet.overwrite( node.start, node.end, name ); - } + const name = has( names, node.name ) && names[ node.name ]; + + if ( name && name !== node.name ) { + snippet.overwrite( node.start, node.end, name ); } }, diff --git a/test/samples/rewrite-member-expressions/_config.js b/test/samples/rewrite-member-expressions/_config.js new file mode 100644 index 0000000..8fc81ea --- /dev/null +++ b/test/samples/rewrite-member-expressions/_config.js @@ -0,0 +1,3 @@ +module.exports = { + description: 'rewrites identifiers at the head of member expressions' +}; \ No newline at end of file diff --git a/test/samples/rewrite-member-expressions/getLengthOfOtherQueue.js b/test/samples/rewrite-member-expressions/getLengthOfOtherQueue.js new file mode 100644 index 0000000..3041dd3 --- /dev/null +++ b/test/samples/rewrite-member-expressions/getLengthOfOtherQueue.js @@ -0,0 +1,5 @@ +export default function getLengthOfOtherQueue () { + return queue.length; +} + +var queue = new Array( 1000 ); \ No newline at end of file diff --git a/test/samples/rewrite-member-expressions/main.js b/test/samples/rewrite-member-expressions/main.js new file mode 100644 index 0000000..029c496 --- /dev/null +++ b/test/samples/rewrite-member-expressions/main.js @@ -0,0 +1,7 @@ +import { addToQueue, getQueueItem } from './mainQueue'; +import getLengthOfOtherQueue from './getLengthOfOtherQueue'; + +addToQueue( 42 ); + +assert.equal( getQueueItem( 0 ), 42 ); +assert.equal( getLengthOfOtherQueue(), 1000 ); \ No newline at end of file diff --git a/test/samples/rewrite-member-expressions/mainQueue.js b/test/samples/rewrite-member-expressions/mainQueue.js new file mode 100644 index 0000000..161cfb9 --- /dev/null +++ b/test/samples/rewrite-member-expressions/mainQueue.js @@ -0,0 +1,9 @@ +var queue = []; + +export function addToQueue ( x ) { + queue.push( x ); +} + +export function getQueueItem ( i ) { + return queue[i]; +} \ No newline at end of file