Mark transpiled JSX elements as pure (#11126)
* Mark transpiled JSX elements as pure * Avoid duble annotation * Add "pure" option to the React preset * Fix generator indentation * Update tests * Add tests for the "pure" option * Update windows fixtures
This commit is contained in:
@@ -4,6 +4,8 @@ import { declare } from "@babel/helper-plugin-utils";
|
||||
import { types as t } from "@babel/core";
|
||||
|
||||
export default declare((api, options) => {
|
||||
const PURE_ANNOTATION = options.pure;
|
||||
|
||||
const visitor = helper(api, {
|
||||
pre(state) {
|
||||
const tagName = state.tagName;
|
||||
@@ -20,6 +22,9 @@ export default declare((api, options) => {
|
||||
state.createElementCallee = pass.get(
|
||||
"@babel/plugin-react-jsx/createElementIdentifier",
|
||||
)();
|
||||
|
||||
state.pure =
|
||||
PURE_ANNOTATION ?? !pass.get("@babel/plugin-react-jsx/pragmaSet");
|
||||
} else {
|
||||
state.jsxCallee = pass.get("@babel/plugin-react-jsx/jsxIdentifier")();
|
||||
state.jsxStaticCallee = pass.get(
|
||||
@@ -28,6 +33,10 @@ export default declare((api, options) => {
|
||||
state.createElementCallee = pass.get(
|
||||
"@babel/plugin-react-jsx/createElementIdentifier",
|
||||
)();
|
||||
|
||||
state.pure =
|
||||
PURE_ANNOTATION ??
|
||||
!pass.get("@babel/plugin-react-jsx/importSourceSet");
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -3,23 +3,23 @@ import { jsxDEV as _jsxDEV } from "react/jsx-dev-runtime";
|
||||
import { Fragment as _Fragment } from "react/jsx-dev-runtime";
|
||||
var _jsxFileName = "<CWD>/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/auto-import-dev/input.js";
|
||||
|
||||
var x = _jsxDEV(_Fragment, {
|
||||
children: _jsxDEV("div", {
|
||||
children: [_jsxDEV("div", {}, "1", false, {
|
||||
var x = /*#__PURE__*/_jsxDEV(_Fragment, {
|
||||
children: /*#__PURE__*/_jsxDEV("div", {
|
||||
children: [/*#__PURE__*/_jsxDEV("div", {}, "1", false, {
|
||||
fileName: _jsxFileName,
|
||||
lineNumber: 4,
|
||||
columnNumber: 7
|
||||
}, this), _jsxDEV("div", {
|
||||
}, this), /*#__PURE__*/_jsxDEV("div", {
|
||||
meow: "wolf"
|
||||
}, "2", false, {
|
||||
fileName: _jsxFileName,
|
||||
lineNumber: 5,
|
||||
columnNumber: 7
|
||||
}, this), _jsxDEV("div", {}, "3", false, {
|
||||
}, this), /*#__PURE__*/_jsxDEV("div", {}, "3", false, {
|
||||
fileName: _jsxFileName,
|
||||
lineNumber: 6,
|
||||
columnNumber: 7
|
||||
}, this), _createElement("div", { ...props,
|
||||
}, this), /*#__PURE__*/_createElement("div", { ...props,
|
||||
key: "4",
|
||||
__source: {
|
||||
fileName: _jsxFileName,
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
var _jsxFileName = "<CWD>/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/classic-runtime/input.js";
|
||||
var x = React.createElement(React.Fragment, null, React.createElement("div", {
|
||||
var x = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
||||
__source: {
|
||||
fileName: _jsxFileName,
|
||||
lineNumber: 3,
|
||||
columnNumber: 5
|
||||
},
|
||||
__self: this
|
||||
}, React.createElement("div", {
|
||||
}, /*#__PURE__*/React.createElement("div", {
|
||||
key: "1",
|
||||
__source: {
|
||||
fileName: _jsxFileName,
|
||||
@@ -14,7 +14,7 @@ var x = React.createElement(React.Fragment, null, React.createElement("div", {
|
||||
columnNumber: 9
|
||||
},
|
||||
__self: this
|
||||
}), React.createElement("div", {
|
||||
}), /*#__PURE__*/React.createElement("div", {
|
||||
key: "2",
|
||||
meow: "wolf",
|
||||
__source: {
|
||||
@@ -23,7 +23,7 @@ var x = React.createElement(React.Fragment, null, React.createElement("div", {
|
||||
columnNumber: 9
|
||||
},
|
||||
__self: this
|
||||
}), React.createElement("div", {
|
||||
}), /*#__PURE__*/React.createElement("div", {
|
||||
key: "3",
|
||||
__source: {
|
||||
fileName: _jsxFileName,
|
||||
@@ -31,7 +31,7 @@ var x = React.createElement(React.Fragment, null, React.createElement("div", {
|
||||
columnNumber: 9
|
||||
},
|
||||
__self: this
|
||||
}), React.createElement("div", { ...props,
|
||||
}), /*#__PURE__*/React.createElement("div", { ...props,
|
||||
key: "4",
|
||||
__source: {
|
||||
fileName: _jsxFileName,
|
||||
|
||||
@@ -2,8 +2,8 @@ var _reactJsxDevRuntime = require("react/jsx-dev-runtime");
|
||||
|
||||
var _jsxFileName = "<CWD>/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/fragments/input.js";
|
||||
|
||||
var x = _reactJsxDevRuntime.jsxDEV(_reactJsxDevRuntime.Fragment, {
|
||||
children: _reactJsxDevRuntime.jsxDEV("div", {}, void 0, false, {
|
||||
var x = /*#__PURE__*/_reactJsxDevRuntime.jsxDEV(_reactJsxDevRuntime.Fragment, {
|
||||
children: /*#__PURE__*/_reactJsxDevRuntime.jsxDEV("div", {}, void 0, false, {
|
||||
fileName: _jsxFileName,
|
||||
lineNumber: 1,
|
||||
columnNumber: 11
|
||||
|
||||
@@ -2,7 +2,7 @@ var _reactJsxDevRuntime = require("react/jsx-dev-runtime");
|
||||
|
||||
var _jsxFileName = "<CWD>/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-fragments-with-key/input.js";
|
||||
|
||||
var x = _reactJsxDevRuntime.jsxDEV(React.Fragment, {}, "foo", false, {
|
||||
var x = /*#__PURE__*/_reactJsxDevRuntime.jsxDEV(React.Fragment, {}, "foo", false, {
|
||||
fileName: _jsxFileName,
|
||||
lineNumber: 1,
|
||||
columnNumber: 9
|
||||
|
||||
@@ -2,12 +2,12 @@ var _reactJsxDevRuntime = require("react/jsx-dev-runtime");
|
||||
|
||||
var _jsxFileName = "<CWD>/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-nonstatic-children/input.js";
|
||||
|
||||
var x = _reactJsxDevRuntime.jsxDEV("div", {
|
||||
children: [_reactJsxDevRuntime.jsxDEV("span", {}, "0", false, {
|
||||
var x = /*#__PURE__*/_reactJsxDevRuntime.jsxDEV("div", {
|
||||
children: [/*#__PURE__*/_reactJsxDevRuntime.jsxDEV("span", {}, "0", false, {
|
||||
fileName: _jsxFileName,
|
||||
lineNumber: 1,
|
||||
columnNumber: 16
|
||||
}, this), _reactJsxDevRuntime.jsxDEV("span", {}, "1", false, {
|
||||
}, this), /*#__PURE__*/_reactJsxDevRuntime.jsxDEV("span", {}, "1", false, {
|
||||
fileName: _jsxFileName,
|
||||
lineNumber: 1,
|
||||
columnNumber: 36
|
||||
|
||||
@@ -2,16 +2,16 @@ var _reactJsxDevRuntime = require("react/jsx-dev-runtime");
|
||||
|
||||
var _jsxFileName = "<CWD>/packages/babel-plugin-transform-react-jsx-development/test/fixtures/linux/handle-static-children/input.js";
|
||||
|
||||
var x = _reactJsxDevRuntime.jsxDEV("div", {
|
||||
children: [_reactJsxDevRuntime.jsxDEV("span", {}, void 0, false, {
|
||||
var x = /*#__PURE__*/_reactJsxDevRuntime.jsxDEV("div", {
|
||||
children: [/*#__PURE__*/_reactJsxDevRuntime.jsxDEV("span", {}, void 0, false, {
|
||||
fileName: _jsxFileName,
|
||||
lineNumber: 3,
|
||||
columnNumber: 5
|
||||
}, this), [_reactJsxDevRuntime.jsxDEV("span", {}, "0", false, {
|
||||
}, this), [/*#__PURE__*/_reactJsxDevRuntime.jsxDEV("span", {}, "0", false, {
|
||||
fileName: _jsxFileName,
|
||||
lineNumber: 4,
|
||||
columnNumber: 7
|
||||
}, this), _reactJsxDevRuntime.jsxDEV("span", {}, "1", false, {
|
||||
}, this), /*#__PURE__*/_reactJsxDevRuntime.jsxDEV("span", {}, "1", false, {
|
||||
fileName: _jsxFileName,
|
||||
lineNumber: 4,
|
||||
columnNumber: 27
|
||||
|
||||
@@ -3,23 +3,23 @@ import { jsxDEV as _jsxDEV } from "react/jsx-dev-runtime";
|
||||
import { Fragment as _Fragment } from "react/jsx-dev-runtime";
|
||||
var _jsxFileName = "C:\\Users\\travis\\build\\babel\\babel\\packages\\babel-plugin-transform-react-jsx-development\\test\\fixtures\\windows\\auto-import-dev-windows\\input.js";
|
||||
|
||||
var x = _jsxDEV(_Fragment, {
|
||||
children: _jsxDEV("div", {
|
||||
children: [_jsxDEV("div", {}, "1", false, {
|
||||
var x = /*#__PURE__*/_jsxDEV(_Fragment, {
|
||||
children: /*#__PURE__*/_jsxDEV("div", {
|
||||
children: [/*#__PURE__*/_jsxDEV("div", {}, "1", false, {
|
||||
fileName: _jsxFileName,
|
||||
lineNumber: 4,
|
||||
columnNumber: 7
|
||||
}, this), _jsxDEV("div", {
|
||||
}, this), /*#__PURE__*/_jsxDEV("div", {
|
||||
meow: "wolf"
|
||||
}, "2", false, {
|
||||
fileName: _jsxFileName,
|
||||
lineNumber: 5,
|
||||
columnNumber: 7
|
||||
}, this), _jsxDEV("div", {}, "3", false, {
|
||||
}, this), /*#__PURE__*/_jsxDEV("div", {}, "3", false, {
|
||||
fileName: _jsxFileName,
|
||||
lineNumber: 6,
|
||||
columnNumber: 7
|
||||
}, this), _createElement("div", { ...props,
|
||||
}, this), /*#__PURE__*/_createElement("div", { ...props,
|
||||
key: "4",
|
||||
__source: {
|
||||
fileName: _jsxFileName,
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
var _jsxFileName = "C:\\Users\\travis\\build\\babel\\babel\\packages\\babel-plugin-transform-react-jsx-development\\test\\fixtures\\windows\\classic-runtime-windows\\input.js";
|
||||
var x = React.createElement(React.Fragment, null, React.createElement("div", {
|
||||
var x = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
||||
__source: {
|
||||
fileName: _jsxFileName,
|
||||
lineNumber: 3,
|
||||
columnNumber: 5
|
||||
},
|
||||
__self: this
|
||||
}, React.createElement("div", {
|
||||
}, /*#__PURE__*/React.createElement("div", {
|
||||
key: "1",
|
||||
__source: {
|
||||
fileName: _jsxFileName,
|
||||
@@ -14,7 +14,7 @@ var x = React.createElement(React.Fragment, null, React.createElement("div", {
|
||||
columnNumber: 7
|
||||
},
|
||||
__self: this
|
||||
}), React.createElement("div", {
|
||||
}), /*#__PURE__*/React.createElement("div", {
|
||||
key: "2",
|
||||
meow: "wolf",
|
||||
__source: {
|
||||
@@ -23,7 +23,7 @@ var x = React.createElement(React.Fragment, null, React.createElement("div", {
|
||||
columnNumber: 7
|
||||
},
|
||||
__self: this
|
||||
}), React.createElement("div", {
|
||||
}), /*#__PURE__*/React.createElement("div", {
|
||||
key: "3",
|
||||
__source: {
|
||||
fileName: _jsxFileName,
|
||||
@@ -31,7 +31,7 @@ var x = React.createElement(React.Fragment, null, React.createElement("div", {
|
||||
columnNumber: 7
|
||||
},
|
||||
__self: this
|
||||
}), React.createElement("div", { ...props,
|
||||
}), /*#__PURE__*/React.createElement("div", { ...props,
|
||||
key: "4",
|
||||
__source: {
|
||||
fileName: _jsxFileName,
|
||||
|
||||
@@ -2,8 +2,8 @@ var _reactJsxDevRuntime = require("react/jsx-dev-runtime");
|
||||
|
||||
var _jsxFileName = "C:\\Users\\travis\\build\\babel\\babel\\packages\\babel-plugin-transform-react-jsx-development\\test\\fixtures\\windows\\fragments-windows\\input.js";
|
||||
|
||||
var x = _reactJsxDevRuntime.jsxDEV(_reactJsxDevRuntime.Fragment, {
|
||||
children: _reactJsxDevRuntime.jsxDEV("div", {}, void 0, false, {
|
||||
var x = /*#__PURE__*/_reactJsxDevRuntime.jsxDEV(_reactJsxDevRuntime.Fragment, {
|
||||
children: /*#__PURE__*/_reactJsxDevRuntime.jsxDEV("div", {}, void 0, false, {
|
||||
fileName: _jsxFileName,
|
||||
lineNumber: 1,
|
||||
columnNumber: 11
|
||||
|
||||
@@ -2,7 +2,7 @@ var _reactJsxDevRuntime = require("react/jsx-dev-runtime");
|
||||
|
||||
var _jsxFileName = "C:\\Users\\travis\\build\\babel\\babel\\packages\\babel-plugin-transform-react-jsx-development\\test\\fixtures\\windows\\handle-fragments-with-key-windows\\input.js";
|
||||
|
||||
var x = _reactJsxDevRuntime.jsxDEV(React.Fragment, {}, "foo", false, {
|
||||
var x = /*#__PURE__*/_reactJsxDevRuntime.jsxDEV(React.Fragment, {}, "foo", false, {
|
||||
fileName: _jsxFileName,
|
||||
lineNumber: 1,
|
||||
columnNumber: 9
|
||||
|
||||
@@ -2,12 +2,12 @@ var _reactJsxDevRuntime = require("react/jsx-dev-runtime");
|
||||
|
||||
var _jsxFileName = "C:\\Users\\travis\\build\\babel\\babel\\packages\\babel-plugin-transform-react-jsx-development\\test\\fixtures\\windows\\handle-nonstatic-children-windows\\input.js";
|
||||
|
||||
var x = _reactJsxDevRuntime.jsxDEV("div", {
|
||||
children: [_reactJsxDevRuntime.jsxDEV("span", {}, '0', false, {
|
||||
var x = /*#__PURE__*/_reactJsxDevRuntime.jsxDEV("div", {
|
||||
children: [/*#__PURE__*/_reactJsxDevRuntime.jsxDEV("span", {}, '0', false, {
|
||||
fileName: _jsxFileName,
|
||||
lineNumber: 3,
|
||||
columnNumber: 11
|
||||
}, this), _reactJsxDevRuntime.jsxDEV("span", {}, '1', false, {
|
||||
}, this), /*#__PURE__*/_reactJsxDevRuntime.jsxDEV("span", {}, '1', false, {
|
||||
fileName: _jsxFileName,
|
||||
lineNumber: 3,
|
||||
columnNumber: 31
|
||||
|
||||
@@ -2,16 +2,16 @@ var _reactJsxDevRuntime = require("react/jsx-dev-runtime");
|
||||
|
||||
var _jsxFileName = "C:\\Users\\travis\\build\\babel\\babel\\packages\\babel-plugin-transform-react-jsx-development\\test\\fixtures\\windows\\handle-static-children-windows\\input.js";
|
||||
|
||||
var x = _reactJsxDevRuntime.jsxDEV("div", {
|
||||
children: [_reactJsxDevRuntime.jsxDEV("span", {}, void 0, false, {
|
||||
var x = /*#__PURE__*/_reactJsxDevRuntime.jsxDEV("div", {
|
||||
children: [/*#__PURE__*/_reactJsxDevRuntime.jsxDEV("span", {}, void 0, false, {
|
||||
fileName: _jsxFileName,
|
||||
lineNumber: 3,
|
||||
columnNumber: 9
|
||||
}, this), [_reactJsxDevRuntime.jsxDEV("span", {}, '0', false, {
|
||||
}, this), [/*#__PURE__*/_reactJsxDevRuntime.jsxDEV("span", {}, '0', false, {
|
||||
fileName: _jsxFileName,
|
||||
lineNumber: 4,
|
||||
columnNumber: 11
|
||||
}, this), _reactJsxDevRuntime.jsxDEV("span", {}, '1', false, {
|
||||
}, this), /*#__PURE__*/_reactJsxDevRuntime.jsxDEV("span", {}, '1', false, {
|
||||
fileName: _jsxFileName,
|
||||
lineNumber: 4,
|
||||
columnNumber: 31
|
||||
|
||||
Reference in New Issue
Block a user