canonical
Version:
Canonical code style linter and formatter for JavaScript, SCSS, CSS and JSON.
95 lines (76 loc) • 5.17 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 _set = require('babel-runtime/core-js/set');
var _set2 = _interopRequireDefault(_set);
var _map = require('babel-runtime/core-js/map');
var _map2 = _interopRequireDefault(_map);
var _resolve = require('../core/resolve');
var _resolve2 = _interopRequireDefault(_resolve);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
module.exports = function (context) {
var imported = new _map2.default();
return {
'ImportDeclaration': function ImportDeclaration(n) {
// resolved path will cover aliased duplicates
var resolvedPath = (0, _resolve2.default)(n.source.value, context) || n.source.value;
if (imported.has(resolvedPath)) {
imported.get(resolvedPath).add(n.source);
} else {
imported.set(resolvedPath, new _set2.default([n.source]));
}
},
'Program:exit': function ProgramExit() {
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = (0, _getIterator3.default)(imported.entries()), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var _step$value = (0, _slicedToArray3.default)(_step.value, 2);
var _module = _step$value[0];
var nodes = _step$value[1];
if (nodes.size > 1) {
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = undefined;
try {
for (var _iterator2 = (0, _getIterator3.default)(nodes), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var node = _step2.value;
context.report(node, '\'' + _module + '\' imported multiple times.');
}
} catch (err) {
_didIteratorError2 = true;
_iteratorError2 = err;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
}
};
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJ1bGVzL25vLWR1cGxpY2F0ZXMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsT0FBTyxPQUFQLEdBQWlCLFVBQVUsT0FBVixFQUFtQjtBQUNsQyxNQUFNLFdBQVcsbUJBQVgsQ0FENEI7QUFFbEMsU0FBTztBQUNMLHlCQUFxQiwyQkFBVSxDQUFWLEVBQWE7O0FBRWhDLFVBQUksZUFBZSx1QkFBUSxFQUFFLE1BQUYsQ0FBUyxLQUFULEVBQWdCLE9BQXhCLEtBQW9DLEVBQUUsTUFBRixDQUFTLEtBQVQsQ0FGdkI7O0FBSWhDLFVBQUksU0FBUyxHQUFULENBQWEsWUFBYixDQUFKLEVBQWdDO0FBQzlCLGlCQUFTLEdBQVQsQ0FBYSxZQUFiLEVBQTJCLEdBQTNCLENBQStCLEVBQUUsTUFBRixDQUEvQixDQUQ4QjtPQUFoQyxNQUVPO0FBQ0wsaUJBQVMsR0FBVCxDQUFhLFlBQWIsRUFBMkIsa0JBQVEsQ0FBQyxFQUFFLE1BQUYsQ0FBVCxDQUEzQixFQURLO09BRlA7S0FKbUI7O0FBV3JCLG9CQUFnQix1QkFBWTs7Ozs7O0FBQzFCLHdEQUE0QixTQUFTLE9BQVQsVUFBNUIsb0dBQWdEOzs7Y0FBdEMseUJBQXNDO2NBQTlCLHVCQUE4Qjs7QUFDOUMsY0FBSSxNQUFNLElBQU4sR0FBYSxDQUFiLEVBQWdCOzs7Ozs7QUFDbEIsK0RBQWlCLGNBQWpCLHdHQUF3QjtvQkFBZixvQkFBZTs7QUFDdEIsd0JBQVEsTUFBUixDQUFlLElBQWYsU0FBeUIsdUNBQXpCLEVBRHNCO2VBQXhCOzs7Ozs7Ozs7Ozs7OzthQURrQjtXQUFwQjtTQURGOzs7Ozs7Ozs7Ozs7OztPQUQwQjtLQUFaO0dBWmxCLENBRmtDO0NBQW5CIiwiZmlsZSI6InJ1bGVzL25vLWR1cGxpY2F0ZXMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcmVzb2x2ZSBmcm9tICcuLi9jb3JlL3Jlc29sdmUnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgY29uc3QgaW1wb3J0ZWQgPSBuZXcgTWFwKClcbiAgcmV0dXJuIHtcbiAgICAnSW1wb3J0RGVjbGFyYXRpb24nOiBmdW5jdGlvbiAobikge1xuICAgICAgLy8gcmVzb2x2ZWQgcGF0aCB3aWxsIGNvdmVyIGFsaWFzZWQgZHVwbGljYXRlc1xuICAgICAgbGV0IHJlc29sdmVkUGF0aCA9IHJlc29sdmUobi5zb3VyY2UudmFsdWUsIGNvbnRleHQpIHx8IG4uc291cmNlLnZhbHVlXG5cbiAgICAgIGlmIChpbXBvcnRlZC5oYXMocmVzb2x2ZWRQYXRoKSkge1xuICAgICAgICBpbXBvcnRlZC5nZXQocmVzb2x2ZWRQYXRoKS5hZGQobi5zb3VyY2UpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbXBvcnRlZC5zZXQocmVzb2x2ZWRQYXRoLCBuZXcgU2V0KFtuLnNvdXJjZV0pKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAnUHJvZ3JhbTpleGl0JzogZnVuY3Rpb24gKCkge1xuICAgICAgZm9yIChsZXQgW21vZHVsZSwgbm9kZXNdIG9mIGltcG9ydGVkLmVudHJpZXMoKSkge1xuICAgICAgICBpZiAobm9kZXMuc2l6ZSA+IDEpIHtcbiAgICAgICAgICBmb3IgKGxldCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBgJyR7bW9kdWxlfScgaW1wb3J0ZWQgbXVsdGlwbGUgdGltZXMuYClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICB9XG59XG4iXX0=