From 1d4d0c0175b575fb4d323a860555f2feedec62e5 Mon Sep 17 00:00:00 2001 From: Amjad Masad Date: Thu, 7 Jan 2016 21:02:59 -0800 Subject: [PATCH] [T6933] Rename any shadowing Symbol binding --- .../src/index.js | 8 ++++++++ .../test/fixtures/symbols/shadow/actual.js | 3 +++ .../test/fixtures/symbols/shadow/expected.js | 5 +++++ .../test/fixtures/symbols/shadow/options.json | 3 +++ 4 files changed, 19 insertions(+) create mode 100644 packages/babel-plugin-transform-es2015-typeof-symbol/test/fixtures/symbols/shadow/actual.js create mode 100644 packages/babel-plugin-transform-es2015-typeof-symbol/test/fixtures/symbols/shadow/expected.js create mode 100644 packages/babel-plugin-transform-es2015-typeof-symbol/test/fixtures/symbols/shadow/options.json diff --git a/packages/babel-plugin-transform-es2015-typeof-symbol/src/index.js b/packages/babel-plugin-transform-es2015-typeof-symbol/src/index.js index 08df2600a8..210dfdb17d 100644 --- a/packages/babel-plugin-transform-es2015-typeof-symbol/src/index.js +++ b/packages/babel-plugin-transform-es2015-typeof-symbol/src/index.js @@ -3,6 +3,14 @@ export default function ({ types: t }) { return { visitor: { + Scope({ scope }) { + if (!scope.getBinding("Symbol")) { + return; + } + + scope.rename("Symbol"); + }, + UnaryExpression(path) { let { node, parent } = path; if (node[IGNORE]) return; diff --git a/packages/babel-plugin-transform-es2015-typeof-symbol/test/fixtures/symbols/shadow/actual.js b/packages/babel-plugin-transform-es2015-typeof-symbol/test/fixtures/symbols/shadow/actual.js new file mode 100644 index 0000000000..5bf0d8b678 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-typeof-symbol/test/fixtures/symbols/shadow/actual.js @@ -0,0 +1,3 @@ +var Symbol = foo(); +typeof s; +foo(Symbol); diff --git a/packages/babel-plugin-transform-es2015-typeof-symbol/test/fixtures/symbols/shadow/expected.js b/packages/babel-plugin-transform-es2015-typeof-symbol/test/fixtures/symbols/shadow/expected.js new file mode 100644 index 0000000000..0e6479c445 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-typeof-symbol/test/fixtures/symbols/shadow/expected.js @@ -0,0 +1,5 @@ +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; }; + +var _Symbol = foo(); +typeof s === "undefined" ? "undefined" : _typeof(s); +foo(_Symbol); diff --git a/packages/babel-plugin-transform-es2015-typeof-symbol/test/fixtures/symbols/shadow/options.json b/packages/babel-plugin-transform-es2015-typeof-symbol/test/fixtures/symbols/shadow/options.json new file mode 100644 index 0000000000..a9b95ca6a3 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-typeof-symbol/test/fixtures/symbols/shadow/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["transform-es2015-typeof-symbol"] +}