UNPKG

canonical

Version:

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

118 lines (92 loc) 9 kB
'use strict'; var _getIterator2 = require('babel-runtime/core-js/get-iterator'); var _getIterator3 = _interopRequireDefault(_getIterator2); var _resolve = require('../core/resolve'); var _resolve2 = _interopRequireDefault(_resolve); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } module.exports = function (context) { function checkSourceValue(source) { if (source == null) return; if ((0, _resolve2.default)(source.value, context) === undefined) { context.report(source, 'Unable to resolve path to module \'' + source.value + '\'.'); } } // for import-y declarations function checkSource(node) { checkSourceValue(node.source); } // for CommonJS `require` calls // adapted from @mctep: http://git.io/v4rAu function checkCommon(call) { if (call.callee.type !== 'Identifier') return; if (call.callee.name !== 'require') return; if (call.arguments.length !== 1) return; var modulePath = call.arguments[0]; if (modulePath.type !== 'Literal') return; if (typeof modulePath.value !== 'string') return; checkSourceValue(modulePath); } function checkAMD(call) { if (call.callee.type !== 'Identifier') return; if (call.callee.name !== 'require' && call.callee.name !== 'define') return; if (call.arguments.length !== 2) return; var modules = call.arguments[0]; if (modules.type !== 'ArrayExpression') return; var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = (0, _getIterator3.default)(modules.elements), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var element = _step.value; if (element.type !== 'Literal') continue; if (typeof element.value !== 'string') continue; if (element.value === 'require' || element.value === 'exports') continue; // magic modules: http://git.io/vByan checkSourceValue(element); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } } var visitors = { 'ImportDeclaration': checkSource, 'ExportNamedDeclaration': checkSource, 'ExportAllDeclaration': checkSource }; if (context.options[0] != null) { (function () { var _context$options$ = context.options[0]; var commonjs = _context$options$.commonjs; var amd = _context$options$.amd; if (commonjs || amd) { visitors['CallExpression'] = function (call) { if (commonjs) checkCommon(call); if (amd) checkAMD(call); }; } })(); } return visitors; }; /** * @fileOverview Ensures that an imported path exists, given resolution rules. * @author Ben Mosher */ module.exports.schema = [{ 'type': 'object', 'properties': { 'commonjs': { 'type': 'boolean' }, 'amd': { 'type': 'boolean' } }, 'additionalProperties': false }]; //# sourceMappingURL=data:application/json;base64,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QUFmLEdBQXdCLENBQ3RCO0FBQ0UsVUFBUSxRQUFSO0FBQ0EsZ0JBQWM7QUFDWixnQkFBWSxFQUFFLFFBQVEsU0FBUixFQUFkO0FBQ0EsV0FBTyxFQUFFLFFBQVEsU0FBUixFQUFUO0dBRkY7QUFJQSwwQkFBd0IsS0FBeEI7Q0FQb0IsQ0FBeEIiLCJmaWxlIjoicnVsZXMvbm8tdW5yZXNvbHZlZC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVPdmVydmlldyBFbnN1cmVzIHRoYXQgYW4gaW1wb3J0ZWQgcGF0aCBleGlzdHMsIGdpdmVuIHJlc29sdXRpb24gcnVsZXMuXG4gKiBAYXV0aG9yIEJlbiBNb3NoZXJcbiAqL1xuaW1wb3J0IHJlc29sdmUgZnJvbSAnLi4vY29yZS9yZXNvbHZlJ1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cbiAgZnVuY3Rpb24gY2hlY2tTb3VyY2VWYWx1ZShzb3VyY2UpIHtcbiAgICBpZiAoc291cmNlID09IG51bGwpIHJldHVyblxuXG4gICAgaWYgKHJlc29sdmUoc291cmNlLnZhbHVlLCBjb250ZXh0KSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb250ZXh0LnJlcG9ydChzb3VyY2UsXG4gICAgICAgICdVbmFibGUgdG8gcmVzb2x2ZSBwYXRoIHRvIG1vZHVsZSBcXCcnICsgc291cmNlLnZhbHVlICsgJ1xcJy4nKVxuICAgIH1cbiAgfVxuXG4gIC8vIGZvciBpbXBvcnQteSBkZWNsYXJhdGlvbnNcbiAgZnVuY3Rpb24gY2hlY2tTb3VyY2Uobm9kZSkge1xuICAgIGNoZWNrU291cmNlVmFsdWUobm9kZS5zb3VyY2UpXG4gIH1cblxuICAvLyBmb3IgQ29tbW9uSlMgYHJlcXVpcmVgIGNhbGxzXG4gIC8vIGFkYXB0ZWQgZnJvbSBAbWN0ZXA6IGh0dHA6Ly9naXQuaW8vdjRyQXVcbiAgZnVuY3Rpb24gY2hlY2tDb21tb24oY2FsbCkge1xuICAgIGlmIChjYWxsLmNhbGxlZS50eXBlICE9PSAnSWRlbnRpZmllcicpIHJldHVyblxuICAgIGlmIChjYWxsLmNhbGxlZS5uYW1lICE9PSAncmVxdWlyZScpIHJldHVyblxuICAgIGlmIChjYWxsLmFyZ3VtZW50cy5sZW5ndGggIT09IDEpIHJldHVyblxuXG4gICAgY29uc3QgbW9kdWxlUGF0aCA9IGNhbGwuYXJndW1lbnRzWzBdXG4gICAgaWYgKG1vZHVsZVBhdGgudHlwZSAhPT0gJ0xpdGVyYWwnKSByZXR1cm5cbiAgICBpZiAodHlwZW9mIG1vZHVsZVBhdGgudmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm5cblxuICAgIGNoZWNrU291cmNlVmFsdWUobW9kdWxlUGF0aClcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrQU1EKGNhbGwpIHtcbiAgICBpZiAoY2FsbC5jYWxsZWUudHlwZSAhPT0gJ0lkZW50aWZpZXInKSByZXR1cm5cbiAgICBpZiAoY2FsbC5jYWxsZWUubmFtZSAhPT0gJ3JlcXVpcmUnICYmXG4gICAgICAgIGNhbGwuY2FsbGVlLm5hbWUgIT09ICdkZWZpbmUnKSByZXR1cm5cbiAgICBpZiAoY2FsbC5hcmd1bWVudHMubGVuZ3RoICE9PSAyKSByZXR1cm5cblxuICAgIGNvbnN0IG1vZHVsZXMgPSBjYWxsLmFyZ3VtZW50c1swXVxuICAgIGlmIChtb2R1bGVzLnR5cGUgIT09ICdBcnJheUV4cHJlc3Npb24nKSByZXR1cm5cblxuICAgIGZvciAobGV0IGVsZW1lbnQgb2YgbW9kdWxlcy5lbGVtZW50cykge1xuICAgICAgaWYgKGVsZW1lbnQudHlwZSAhPT0gJ0xpdGVyYWwnKSBjb250aW51ZVxuICAgICAgaWYgKHR5cGVvZiBlbGVtZW50LnZhbHVlICE9PSAnc3RyaW5nJykgY29udGludWVcblxuICAgICAgaWYgKGVsZW1lbnQudmFsdWUgPT09ICdyZXF1aXJlJyB8fFxuICAgICAgICAgIGVsZW1lbnQudmFsdWUgPT09ICdleHBvcnRzJykgY29udGludWUgLy8gbWFnaWMgbW9kdWxlczogaHR0cDovL2dpdC5pby92QnlhblxuXG4gICAgICBjaGVja1NvdXJjZVZhbHVlKGVsZW1lbnQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgdmlzaXRvcnMgPSB7XG4gICAgJ0ltcG9ydERlY2xhcmF0aW9uJzogY2hlY2tTb3VyY2UsXG4gICAgJ0V4cG9ydE5hbWVkRGVjbGFyYXRpb24nOiBjaGVja1NvdXJjZSxcbiAgICAnRXhwb3J0QWxsRGVjbGFyYXRpb24nOiBjaGVja1NvdXJjZSxcbiAgfVxuXG4gIGlmIChjb250ZXh0Lm9wdGlvbnNbMF0gIT0gbnVsbCkge1xuICAgIGNvbnN0IHsgY29tbW9uanMsIGFtZCB9ID0gY29udGV4dC5vcHRpb25zWzBdXG5cbiAgICBpZiAoY29tbW9uanMgfHwgYW1kKSB7XG4gICAgICB2aXNpdG9yc1snQ2FsbEV4cHJlc3Npb24nXSA9IGZ1bmN0aW9uIChjYWxsKSB7XG4gICAgICAgIGlmIChjb21tb25qcykgY2hlY2tDb21tb24oY2FsbClcbiAgICAgICAgaWYgKGFtZCkgY2hlY2tBTUQoY2FsbClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmlzaXRvcnNcbn1cblxubW9kdWxlLmV4cG9ydHMuc2NoZW1hID0gW1xuICB7XG4gICAgJ3R5cGUnOiAnb2JqZWN0JyxcbiAgICAncHJvcGVydGllcyc6IHtcbiAgICAgICdjb21tb25qcyc6IHsgJ3R5cGUnOiAnYm9vbGVhbicgfSxcbiAgICAgICdhbWQnOiB7ICd0eXBlJzogJ2Jvb2xlYW4nIH0sXG4gICAgfSxcbiAgICAnYWRkaXRpb25hbFByb3BlcnRpZXMnOiBmYWxzZSxcbiAgfSxcbl1cbiJdfQ==