nicer local exports remapping in default module formatter
This commit is contained in:
@@ -3,41 +3,52 @@ module.exports = DefaultFormatter;
|
||||
var traverse = require("../../traverse");
|
||||
var util = require("../../util");
|
||||
var t = require("../../types");
|
||||
var _ = require("lodash");
|
||||
|
||||
function DefaultFormatter(file) {
|
||||
this.exports = [];
|
||||
this.file = file;
|
||||
|
||||
var localExports = [];
|
||||
traverse(file.ast, function (node) {
|
||||
var declar = node && node.declaration;
|
||||
if (t.isExportDeclaration(node) && declar && t.isStatement(declar)) {
|
||||
localExports = localExports.concat(t.getIds(declar));
|
||||
}
|
||||
});
|
||||
this.localExports = localExports;
|
||||
|
||||
this.localExports = this.getLocalExports();
|
||||
this.remapAssignments();
|
||||
}
|
||||
|
||||
DefaultFormatter.prototype.getLocalExports = function () {
|
||||
var localExports = {};
|
||||
|
||||
traverse(this.file.ast, {
|
||||
enter: function (node) {
|
||||
var declar = node && node.declaration;
|
||||
if (t.isExportDeclaration(node) && declar && t.isStatement(declar)) {
|
||||
_.extend(localExports, t.getIds(declar, true));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return localExports;
|
||||
};
|
||||
|
||||
DefaultFormatter.prototype.remapAssignments = function () {
|
||||
var localExports = this.localExports;
|
||||
|
||||
traverse(this.file.ast, function (node) {
|
||||
if (t.isExportDeclaration(node)) return false;
|
||||
traverse(this.file.ast, {
|
||||
enter: function (node, parent, scope) {
|
||||
if (t.isExportDeclaration(node)) return false;
|
||||
|
||||
if (t.isAssignmentExpression(node)) {
|
||||
var left = node.left;
|
||||
if (t.isIdentifier(left) && localExports.indexOf(left.name) >= 0) {
|
||||
return t.assignmentExpression(
|
||||
"=",
|
||||
left,
|
||||
t.assignmentExpression(
|
||||
node.operator,
|
||||
t.memberExpression(t.identifier("exports"), left),
|
||||
node.right
|
||||
)
|
||||
);
|
||||
if (t.isAssignmentExpression(node)) {
|
||||
var left = node.left;
|
||||
var name = left.name;
|
||||
if (t.isIdentifier(left) && localExports[name] && localExports[name] === scope.get(name, true)) {
|
||||
return t.assignmentExpression(
|
||||
"=",
|
||||
left,
|
||||
t.assignmentExpression(
|
||||
node.operator,
|
||||
t.memberExpression(t.identifier("exports"), left),
|
||||
node.right
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user