From 9aa17a6cc2421fa758dd86127819404fe827aa5e Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Thu, 4 Jun 2015 22:23:24 +0100 Subject: [PATCH] don't consider JSXIdentifier HTML tags to be references - fixes #1683 --- src/babel/traversal/path/lib/virtual-types.js | 13 ++++++++++++- .../es6.block-scoping/jsx-identifier/actual.js | 8 ++++++++ .../es6.block-scoping/jsx-identifier/expected.js | 8 ++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 test/core/fixtures/transformation/es6.block-scoping/jsx-identifier/actual.js create mode 100644 test/core/fixtures/transformation/es6.block-scoping/jsx-identifier/expected.js diff --git a/src/babel/traversal/path/lib/virtual-types.js b/src/babel/traversal/path/lib/virtual-types.js index 0698e92ec0..2f6b68104c 100644 --- a/src/babel/traversal/path/lib/virtual-types.js +++ b/src/babel/traversal/path/lib/virtual-types.js @@ -1,9 +1,20 @@ +import * as react from "../../../transformation/helpers/react"; import * as t from "../../../types"; export var ReferencedIdentifier = { types: ["Identifier", "JSXIdentifier"], checkPath({ node, parent }, opts) { - return (t.isIdentifier(node, opts) || t.isJSXIdentifier(node, opts)) && t.isReferenced(node, parent); + if (!t.isIdentifier(node, opts)) { + if (t.isJSXIdentifier(node, opts)) { + if (react.isCompatTag(node.name)) return false; + } else { + // not a JSXIdentifier or an Identifier + return false; + } + } + + // check if node is referenced + return t.isReferenced(node, parent); } }; diff --git a/test/core/fixtures/transformation/es6.block-scoping/jsx-identifier/actual.js b/test/core/fixtures/transformation/es6.block-scoping/jsx-identifier/actual.js new file mode 100644 index 0000000000..0a1de6732d --- /dev/null +++ b/test/core/fixtures/transformation/es6.block-scoping/jsx-identifier/actual.js @@ -0,0 +1,8 @@ +// #1683 + +var arr = []; +for(let i = 0; i < 4; ++i) { + arr.push( + + ); +} diff --git a/test/core/fixtures/transformation/es6.block-scoping/jsx-identifier/expected.js b/test/core/fixtures/transformation/es6.block-scoping/jsx-identifier/expected.js new file mode 100644 index 0000000000..77a929e4fd --- /dev/null +++ b/test/core/fixtures/transformation/es6.block-scoping/jsx-identifier/expected.js @@ -0,0 +1,8 @@ +// #1683 + +"use strict"; + +var arr = []; +for (var i = 0; i < 4; ++i) { + arr.push(React.createElement("i", null)); +}