UNPKG

canonical

Version:

Canonical code style linter and formatter for JavaScript, SCSS, CSS and JSON.

210 lines (171 loc) 11.9 kB
'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==