canonical
Version:
Canonical code style linter and formatter for JavaScript, SCSS, CSS and JSON.
210 lines (171 loc) • 11.9 kB
JavaScript
'use strict';
var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
var _getIterator2 = require('babel-runtime/core-js/get-iterator');
var _getIterator3 = _interopRequireDefault(_getIterator2);
var _map = require('babel-runtime/core-js/map');
var _map2 = _interopRequireDefault(_map);
var _set = require('babel-runtime/core-js/set');
var _set2 = _interopRequireDefault(_set);
var _getExports = require('../core/getExports');
var _getExports2 = _interopRequireDefault(_getExports);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
module.exports = function (context) {
var defaults = new _set2.default(),
named = new _map2.default();
function addNamed(name, node) {
var nodes = named.get(name);
if (nodes == null) {
nodes = new _set2.default();
named.set(name, nodes);
}
nodes.add(node);
}
return {
'ExportDefaultDeclaration': function ExportDefaultDeclaration(node) {
defaults.add(node);
},
'ExportSpecifier': function ExportSpecifier(node) {
addNamed(node.exported.name, node.exported);
},
'ExportNamedDeclaration': function ExportNamedDeclaration(node) {
if (node.declaration == null) return;
if (node.declaration.id != null) {
addNamed(node.declaration.id.name, node.declaration.id);
}
if (node.declaration.declarations != null) {
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = (0, _getIterator3.default)(node.declaration.declarations), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var declaration = _step.value;
(0, _getExports.recursivePatternCapture)(declaration.id, function (v) {
return addNamed(v.name, v);
});
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
}
},
'ExportAllDeclaration': function ExportAllDeclaration(node) {
if (node.source == null) return; // not sure if this is ever true
var remoteExports = _getExports2.default.get(node.source.value, context);
if (remoteExports == null) return;
if (remoteExports.errors.length) {
remoteExports.reportErrors(context, node);
return;
}
if (!remoteExports.hasNamed) {
context.report(node.source, 'No named exports found in module \'' + node.source.value + '\'.');
}
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = (0, _getIterator3.default)(remoteExports.named), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var name = _step2.value;
addNamed(name, node);
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
},
'Program:exit': function ProgramExit() {
if (defaults.size > 1) {
var _iteratorNormalCompletion3 = true;
var _didIteratorError3 = false;
var _iteratorError3 = undefined;
try {
for (var _iterator3 = (0, _getIterator3.default)(defaults), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var node = _step3.value;
context.report(node, 'Multiple default exports.');
}
} catch (err) {
_didIteratorError3 = true;
_iteratorError3 = err;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3.return) {
_iterator3.return();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
}
var _iteratorNormalCompletion4 = true;
var _didIteratorError4 = false;
var _iteratorError4 = undefined;
try {
for (var _iterator4 = (0, _getIterator3.default)(named), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
var _step4$value = (0, _slicedToArray3.default)(_step4.value, 2);
var name = _step4$value[0];
var nodes = _step4$value[1];
if (nodes.size <= 1) continue;
var _iteratorNormalCompletion5 = true;
var _didIteratorError5 = false;
var _iteratorError5 = undefined;
try {
for (var _iterator5 = (0, _getIterator3.default)(nodes), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
var node = _step5.value;
context.report(node, 'Multiple exports of name \'' + name + '\'.');
}
} catch (err) {
_didIteratorError5 = true;
_iteratorError5 = err;
} finally {
try {
if (!_iteratorNormalCompletion5 && _iterator5.return) {
_iterator5.return();
}
} finally {
if (_didIteratorError5) {
throw _iteratorError5;
}
}
}
}
} catch (err) {
_didIteratorError4 = true;
_iteratorError4 = err;
} finally {
try {
if (!_iteratorNormalCompletion4 && _iterator4.return) {
_iterator4.return();
}
} finally {
if (_didIteratorError4) {
throw _iteratorError4;
}
}
}
}
};
};
//# sourceMappingURL=data:application/json;base64,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QWpCLHdCQUFpQjs7QUFDL0IsY0FBSSxNQUFNLElBQU4sSUFBYyxDQUFkLEVBQWlCLFNBQXJCOztnREFEK0I7Ozs7O0FBRy9CLDZEQUFpQixjQUFqQix3R0FBd0I7a0JBQWYsb0JBQWU7O0FBQ3RCLHNCQUFRLE1BQVIsQ0FBZSxJQUFmLGtDQUFrRCxZQUFsRCxFQURzQjthQUF4Qjs7Ozs7Ozs7Ozs7Ozs7V0FIK0I7U0FBakM7Ozs7Ozs7Ozs7Ozs7O09BUDBCO0tBQVo7R0E1Q2xCLENBZmtDO0NBQW5CIiwiZmlsZSI6InJ1bGVzL2V4cG9ydC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeHBvcnRNYXAsIHsgcmVjdXJzaXZlUGF0dGVybkNhcHR1cmUgfSBmcm9tICcuLi9jb3JlL2dldEV4cG9ydHMnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgY29uc3QgZGVmYXVsdHMgPSBuZXcgU2V0KClcbiAgICAgICwgbmFtZWQgPSBuZXcgTWFwKClcblxuICBmdW5jdGlvbiBhZGROYW1lZChuYW1lLCBub2RlKSB7XG4gICAgbGV0IG5vZGVzID0gbmFtZWQuZ2V0KG5hbWUpXG5cbiAgICBpZiAobm9kZXMgPT0gbnVsbCkge1xuICAgICAgbm9kZXMgPSBuZXcgU2V0KClcbiAgICAgIG5hbWVkLnNldChuYW1lLCBub2RlcylcbiAgICB9XG5cbiAgICBub2Rlcy5hZGQobm9kZSlcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgJ0V4cG9ydERlZmF1bHREZWNsYXJhdGlvbic6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBkZWZhdWx0cy5hZGQobm9kZSlcbiAgICB9LFxuXG4gICAgJ0V4cG9ydFNwZWNpZmllcic6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBhZGROYW1lZChub2RlLmV4cG9ydGVkLm5hbWUsIG5vZGUuZXhwb3J0ZWQpXG4gICAgfSxcblxuICAgICdFeHBvcnROYW1lZERlY2xhcmF0aW9uJzogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLmRlY2xhcmF0aW9uID09IG51bGwpIHJldHVyblxuXG4gICAgICBpZiAobm9kZS5kZWNsYXJhdGlvbi5pZCAhPSBudWxsKSB7XG4gICAgICAgIGFkZE5hbWVkKG5vZGUuZGVjbGFyYXRpb24uaWQubmFtZSwgbm9kZS5kZWNsYXJhdGlvbi5pZClcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUuZGVjbGFyYXRpb24uZGVjbGFyYXRpb25zICE9IG51bGwpIHtcbiAgICAgICAgZm9yIChsZXQgZGVjbGFyYXRpb24gb2Ygbm9kZS5kZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgICByZWN1cnNpdmVQYXR0ZXJuQ2FwdHVyZShkZWNsYXJhdGlvbi5pZCwgdiA9PiBhZGROYW1lZCh2Lm5hbWUsIHYpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgICdFeHBvcnRBbGxEZWNsYXJhdGlvbic6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICBpZiAobm9kZS5zb3VyY2UgPT0gbnVsbCkgcmV0dXJuIC8vIG5vdCBzdXJlIGlmIHRoaXMgaXMgZXZlciB0cnVlXG5cbiAgICAgIGNvbnN0IHJlbW90ZUV4cG9ydHMgPSBFeHBvcnRNYXAuZ2V0KG5vZGUuc291cmNlLnZhbHVlLCBjb250ZXh0KVxuICAgICAgaWYgKHJlbW90ZUV4cG9ydHMgPT0gbnVsbCkgcmV0dXJuXG5cbiAgICAgIGlmIChyZW1vdGVFeHBvcnRzLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgcmVtb3RlRXhwb3J0cy5yZXBvcnRFcnJvcnMoY29udGV4dCwgbm9kZSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICghcmVtb3RlRXhwb3J0cy5oYXNOYW1lZCkge1xuICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLnNvdXJjZSxcbiAgICAgICAgICBgTm8gbmFtZWQgZXhwb3J0cyBmb3VuZCBpbiBtb2R1bGUgJyR7bm9kZS5zb3VyY2UudmFsdWV9Jy5gKVxuICAgICAgfVxuXG4gICAgICBmb3IgKGxldCBuYW1lIG9mIHJlbW90ZUV4cG9ydHMubmFtZWQpIHtcbiAgICAgICAgYWRkTmFtZWQobmFtZSwgbm9kZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgJ1Byb2dyYW06ZXhpdCc6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmIChkZWZhdWx0cy5zaXplID4gMSkge1xuICAgICAgICBmb3IgKGxldCBub2RlIG9mIGRlZmF1bHRzKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgJ011bHRpcGxlIGRlZmF1bHQgZXhwb3J0cy4nKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IFtuYW1lLCBub2Rlc10gb2YgbmFtZWQpIHtcbiAgICAgICAgaWYgKG5vZGVzLnNpemUgPD0gMSkgY29udGludWVcblxuICAgICAgICBmb3IgKGxldCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnQobm9kZSwgYE11bHRpcGxlIGV4cG9ydHMgb2YgbmFtZSAnJHtuYW1lfScuYClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIH1cbn1cbiJdfQ==