Add jsx source annotations only to the files that contain JSX

This commit is contained in:
Alex Kotliarskyi
2016-01-20 14:23:27 -08:00
parent eaef8302cc
commit 1f543e1bca
4 changed files with 20 additions and 20 deletions

View File

@@ -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
};

View File

@@ -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);

View File

@@ -0,0 +1 @@
var x = 42;