Add jsx source annotations only to the files that contain JSX
This commit is contained in:
@@ -26,29 +26,27 @@ export default function ({ types: t }) {
|
||||
return t.objectExpression([fileNameProperty, lineNumberProperty]);
|
||||
}
|
||||
|
||||
let jsxVisitor = {
|
||||
JSXOpeningElement(node) {
|
||||
let visitor = {
|
||||
JSXOpeningElement(node, state) {
|
||||
if (!state.fileNameIdentifier) {
|
||||
const fileName = state.file.log.filename !== "unknown"
|
||||
? state.file.log.filename
|
||||
: null;
|
||||
|
||||
const fileNameIdentifier = node.scope.generateUidIdentifier(FILE_NAME_VAR);
|
||||
node.hub.file.scope.push({id: fileNameIdentifier, init: t.stringLiteral(fileName)});
|
||||
state.fileNameIdentifier = fileNameIdentifier;
|
||||
}
|
||||
|
||||
const id = t.jSXIdentifier(TRACE_ID);
|
||||
const location = node.container.openingElement.loc; // undefined for generated elements
|
||||
if (location) {
|
||||
const trace = makeTrace(this.fileNameIdentifier, location.start.line);
|
||||
const trace = makeTrace(state.fileNameIdentifier, location.start.line);
|
||||
node.container.openingElement.attributes.push(t.jSXAttribute(id, t.jSXExpressionContainer(trace)));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
let visitor = {
|
||||
Program(node, state) {
|
||||
const fileName = state.file.log.filename !== "unknown"
|
||||
? state.file.log.filename
|
||||
: null;
|
||||
|
||||
const fileNameIdentifier = node.scope.generateUidIdentifier(FILE_NAME_VAR);
|
||||
node.scope.push({id: fileNameIdentifier, init: t.stringLiteral(fileName)});
|
||||
node.traverse(jsxVisitor, {fileNameIdentifier});
|
||||
},
|
||||
};
|
||||
|
||||
return {
|
||||
visitor
|
||||
};
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
var res = transform(
|
||||
var actual = transform(
|
||||
'var x = <sometag />',
|
||||
Object.assign({}, opts, { filename: '/fake/path/mock.js' })
|
||||
);
|
||||
).code;
|
||||
|
||||
var expected = multiline([
|
||||
'var __jsxFileName = "/fake/path/mock.js";',
|
||||
'var _jsxFileName = "/fake/path/mock.js";',
|
||||
'var x = <sometag __source={{',
|
||||
' fileName: __jsxFileName,',
|
||||
' fileName: _jsxFileName,',
|
||||
' lineNumber: 1',
|
||||
'}} />;',
|
||||
]);
|
||||
|
||||
assert.equal(expected, res.code);
|
||||
assert.equal(actual, expected);
|
||||
|
||||
1
packages/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/no-jsx/actual.js
vendored
Normal file
1
packages/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/no-jsx/actual.js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
var x = 42;
|
||||
@@ -0,0 +1 @@
|
||||
var x = 42;
|
||||
Reference in New Issue
Block a user