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