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)); +}