1 | ;
|
2 |
|
3 | var _docsUrl = require('../docsUrl');
|
4 |
|
5 | var _docsUrl2 = _interopRequireDefault(_docsUrl);
|
6 |
|
7 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
8 |
|
9 | module.exports = {
|
10 | meta: {
|
11 | docs: {
|
12 | url: (0, _docsUrl2.default)('no-mutable-exports')
|
13 | }
|
14 | },
|
15 |
|
16 | create: function (context) {
|
17 | function checkDeclaration(node) {
|
18 | const kind = node.kind;
|
19 |
|
20 | if (kind === 'var' || kind === 'let') {
|
21 | context.report(node, `Exporting mutable '${kind}' binding, use 'const' instead.`);
|
22 | }
|
23 | }
|
24 |
|
25 | function checkDeclarationsInScope(_ref, name) {
|
26 | let variables = _ref.variables;
|
27 |
|
28 | for (let variable of variables) {
|
29 | if (variable.name === name) {
|
30 | for (let def of variable.defs) {
|
31 | if (def.type === 'Variable' && def.parent) {
|
32 | checkDeclaration(def.parent);
|
33 | }
|
34 | }
|
35 | }
|
36 | }
|
37 | }
|
38 |
|
39 | function handleExportDefault(node) {
|
40 | const scope = context.getScope();
|
41 |
|
42 | if (node.declaration.name) {
|
43 | checkDeclarationsInScope(scope, node.declaration.name);
|
44 | }
|
45 | }
|
46 |
|
47 | function handleExportNamed(node) {
|
48 | const scope = context.getScope();
|
49 |
|
50 | if (node.declaration) {
|
51 | checkDeclaration(node.declaration);
|
52 | } else if (!node.source) {
|
53 | for (let specifier of node.specifiers) {
|
54 | checkDeclarationsInScope(scope, specifier.local.name);
|
55 | }
|
56 | }
|
57 | }
|
58 |
|
59 | return {
|
60 | 'ExportDefaultDeclaration': handleExportDefault,
|
61 | 'ExportNamedDeclaration': handleExportNamed
|
62 | };
|
63 | }
|
64 | };
|
65 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJ1bGVzL25vLW11dGFibGUtZXhwb3J0cy5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibWV0YSIsImRvY3MiLCJ1cmwiLCJjcmVhdGUiLCJjb250ZXh0IiwiY2hlY2tEZWNsYXJhdGlvbiIsIm5vZGUiLCJraW5kIiwicmVwb3J0IiwiY2hlY2tEZWNsYXJhdGlvbnNJblNjb3BlIiwibmFtZSIsInZhcmlhYmxlcyIsInZhcmlhYmxlIiwiZGVmIiwiZGVmcyIsInR5cGUiLCJwYXJlbnQiLCJoYW5kbGVFeHBvcnREZWZhdWx0Iiwic2NvcGUiLCJnZXRTY29wZSIsImRlY2xhcmF0aW9uIiwiaGFuZGxlRXhwb3J0TmFtZWQiLCJzb3VyY2UiLCJzcGVjaWZpZXIiLCJzcGVjaWZpZXJzIiwibG9jYWwiXSwibWFwcGluZ3MiOiI7O0FBQUE7Ozs7OztBQUVBQSxPQUFPQyxPQUFQLEdBQWlCO0FBQ2ZDLFFBQU07QUFDSkMsVUFBTTtBQUNKQyxXQUFLLHVCQUFRLG9CQUFSO0FBREQ7QUFERixHQURTOztBQU9mQyxVQUFRLFVBQVVDLE9BQVYsRUFBbUI7QUFDekIsYUFBU0MsZ0JBQVQsQ0FBMEJDLElBQTFCLEVBQWdDO0FBQUEsWUFDdkJDLElBRHVCLEdBQ2ZELElBRGUsQ0FDdkJDLElBRHVCOztBQUU5QixVQUFJQSxTQUFTLEtBQVQsSUFBa0JBLFNBQVMsS0FBL0IsRUFBc0M7QUFDcENILGdCQUFRSSxNQUFSLENBQWVGLElBQWYsRUFBc0Isc0JBQXFCQyxJQUFLLGlDQUFoRDtBQUNEO0FBQ0Y7O0FBRUQsYUFBU0Usd0JBQVQsT0FBK0NDLElBQS9DLEVBQXFEO0FBQUEsVUFBbEJDLFNBQWtCLFFBQWxCQSxTQUFrQjs7QUFDbkQsV0FBSyxJQUFJQyxRQUFULElBQXFCRCxTQUFyQixFQUFnQztBQUM5QixZQUFJQyxTQUFTRixJQUFULEtBQWtCQSxJQUF0QixFQUE0QjtBQUMxQixlQUFLLElBQUlHLEdBQVQsSUFBZ0JELFNBQVNFLElBQXpCLEVBQStCO0FBQzdCLGdCQUFJRCxJQUFJRSxJQUFKLEtBQWEsVUFBYixJQUEyQkYsSUFBSUcsTUFBbkMsRUFBMkM7QUFDekNYLCtCQUFpQlEsSUFBSUcsTUFBckI7QUFDRDtBQUNGO0FBQ0Y7QUFDRjtBQUNGOztBQUVELGFBQVNDLG1CQUFULENBQTZCWCxJQUE3QixFQUFtQztBQUNqQyxZQUFNWSxRQUFRZCxRQUFRZSxRQUFSLEVBQWQ7O0FBRUEsVUFBSWIsS0FBS2MsV0FBTCxDQUFpQlYsSUFBckIsRUFBMkI7QUFDekJELGlDQUF5QlMsS0FBekIsRUFBZ0NaLEtBQUtjLFdBQUwsQ0FBaUJWLElBQWpEO0FBQ0Q7QUFDRjs7QUFFRCxhQUFTVyxpQkFBVCxDQUEyQmYsSUFBM0IsRUFBaUM7QUFDL0IsWUFBTVksUUFBUWQsUUFBUWUsUUFBUixFQUFkOztBQUVBLFVBQUliLEtBQUtjLFdBQVQsRUFBdUI7QUFDckJmLHlCQUFpQkMsS0FBS2MsV0FBdEI7QUFDRCxPQUZELE1BRU8sSUFBSSxDQUFDZCxLQUFLZ0IsTUFBVixFQUFrQjtBQUN2QixhQUFLLElBQUlDLFNBQVQsSUFBc0JqQixLQUFLa0IsVUFBM0IsRUFBdUM7QUFDckNmLG1DQUF5QlMsS0FBekIsRUFBZ0NLLFVBQVVFLEtBQVYsQ0FBZ0JmLElBQWhEO0FBQ0Q7QUFDRjtBQUNGOztBQUVELFdBQU87QUFDTCxrQ0FBNEJPLG1CQUR2QjtBQUVMLGdDQUEwQkk7QUFGckIsS0FBUDtBQUlEO0FBbkRjLENBQWpCIiwiZmlsZSI6InJ1bGVzL25vLW11dGFibGUtZXhwb3J0cy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkb2NzVXJsIGZyb20gJy4uL2RvY3NVcmwnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgdXJsOiBkb2NzVXJsKCduby1tdXRhYmxlLWV4cG9ydHMnKSxcbiAgICB9LFxuICB9LFxuXG4gIGNyZWF0ZTogZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICBmdW5jdGlvbiBjaGVja0RlY2xhcmF0aW9uKG5vZGUpIHtcbiAgICAgIGNvbnN0IHtraW5kfSA9IG5vZGVcbiAgICAgIGlmIChraW5kID09PSAndmFyJyB8fCBraW5kID09PSAnbGV0Jykge1xuICAgICAgICBjb250ZXh0LnJlcG9ydChub2RlLCBgRXhwb3J0aW5nIG11dGFibGUgJyR7a2luZH0nIGJpbmRpbmcsIHVzZSAnY29uc3QnIGluc3RlYWQuYClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja0RlY2xhcmF0aW9uc0luU2NvcGUoe3ZhcmlhYmxlc30sIG5hbWUpIHtcbiAgICAgIGZvciAobGV0IHZhcmlhYmxlIG9mIHZhcmlhYmxlcykge1xuICAgICAgICBpZiAodmFyaWFibGUubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgIGZvciAobGV0IGRlZiBvZiB2YXJpYWJsZS5kZWZzKSB7XG4gICAgICAgICAgICBpZiAoZGVmLnR5cGUgPT09ICdWYXJpYWJsZScgJiYgZGVmLnBhcmVudCkge1xuICAgICAgICAgICAgICBjaGVja0RlY2xhcmF0aW9uKGRlZi5wYXJlbnQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlRXhwb3J0RGVmYXVsdChub2RlKSB7XG4gICAgICBjb25zdCBzY29wZSA9IGNvbnRleHQuZ2V0U2NvcGUoKVxuXG4gICAgICBpZiAobm9kZS5kZWNsYXJhdGlvbi5uYW1lKSB7XG4gICAgICAgIGNoZWNrRGVjbGFyYXRpb25zSW5TY29wZShzY29wZSwgbm9kZS5kZWNsYXJhdGlvbi5uYW1lKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZUV4cG9ydE5hbWVkKG5vZGUpIHtcbiAgICAgIGNvbnN0IHNjb3BlID0gY29udGV4dC5nZXRTY29wZSgpXG5cbiAgICAgIGlmIChub2RlLmRlY2xhcmF0aW9uKSAge1xuICAgICAgICBjaGVja0RlY2xhcmF0aW9uKG5vZGUuZGVjbGFyYXRpb24pXG4gICAgICB9IGVsc2UgaWYgKCFub2RlLnNvdXJjZSkge1xuICAgICAgICBmb3IgKGxldCBzcGVjaWZpZXIgb2Ygbm9kZS5zcGVjaWZpZXJzKSB7XG4gICAgICAgICAgY2hlY2tEZWNsYXJhdGlvbnNJblNjb3BlKHNjb3BlLCBzcGVjaWZpZXIubG9jYWwubmFtZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAnRXhwb3J0RGVmYXVsdERlY2xhcmF0aW9uJzogaGFuZGxlRXhwb3J0RGVmYXVsdCxcbiAgICAgICdFeHBvcnROYW1lZERlY2xhcmF0aW9uJzogaGFuZGxlRXhwb3J0TmFtZWQsXG4gICAgfVxuICB9LFxufVxuIl19 |
\ | No newline at end of file |