From 54819b94e93c324d749bc148b1caa96e09ce9fb2 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Fri, 26 Jun 2015 23:29:09 +0100 Subject: [PATCH] skip flow types when finding rest parameter references --- .../transformers/es6/parameters/rest.js | 5 +++++ .../rest-flow-parameter-reference/actual.js | 9 +++++++++ .../rest-flow-parameter-reference/expected.js | 12 ++++++++++++ 3 files changed, 26 insertions(+) create mode 100644 test/core/fixtures/transformation/es6.parameters/rest-flow-parameter-reference/actual.js create mode 100644 test/core/fixtures/transformation/es6.parameters/rest-flow-parameter-reference/expected.js diff --git a/src/babel/transformation/transformers/es6/parameters/rest.js b/src/babel/transformation/transformers/es6/parameters/rest.js index c467283772..82c40e0d25 100644 --- a/src/babel/transformation/transformers/es6/parameters/rest.js +++ b/src/babel/transformation/transformers/es6/parameters/rest.js @@ -9,6 +9,11 @@ var memberExpressionOptimisationVisitor = { } }, + Flow() { + // don't touch reference in type annotations + this.skip(); + }, + Function(node, parent, scope, state) { // skip over functions as whatever `arguments` we reference inside will refer // to the wrong function diff --git a/test/core/fixtures/transformation/es6.parameters/rest-flow-parameter-reference/actual.js b/test/core/fixtures/transformation/es6.parameters/rest-flow-parameter-reference/actual.js new file mode 100644 index 0000000000..22d0e1caef --- /dev/null +++ b/test/core/fixtures/transformation/es6.parameters/rest-flow-parameter-reference/actual.js @@ -0,0 +1,9 @@ +function foo( + x: Object, + ...types +): { types: Array, x: Object } { + return { + types: types, + x: x, + }; +} diff --git a/test/core/fixtures/transformation/es6.parameters/rest-flow-parameter-reference/expected.js b/test/core/fixtures/transformation/es6.parameters/rest-flow-parameter-reference/expected.js new file mode 100644 index 0000000000..d5babadbd7 --- /dev/null +++ b/test/core/fixtures/transformation/es6.parameters/rest-flow-parameter-reference/expected.js @@ -0,0 +1,12 @@ +"use strict"; + +function foo(x) { + for (var _len = arguments.length, types = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + types[_key - 1] = arguments[_key]; + } + + return { + types: types, + x: x + }; +}