123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- 'use strict';var _declaredScope = require('eslint-module-utils/declaredScope');var _declaredScope2 = _interopRequireDefault(_declaredScope);
- var _ExportMap = require('../ExportMap');var _ExportMap2 = _interopRequireDefault(_ExportMap);
- var _docsUrl = require('../docsUrl');var _docsUrl2 = _interopRequireDefault(_docsUrl);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { 'default': obj };}
- function message(deprecation) {
- return 'Deprecated' + (deprecation.description ? ': ' + String(deprecation.description) : '.');
- }
- function getDeprecation(metadata) {
- if (!metadata || !metadata.doc) {return;}
- return metadata.doc.tags.find(function (t) {return t.title === 'deprecated';});
- }
- module.exports = {
- meta: {
- type: 'suggestion',
- docs: {
- category: 'Helpful warnings',
- description: 'Forbid imported names marked with `@deprecated` documentation tag.',
- url: (0, _docsUrl2['default'])('no-deprecated') },
- schema: [] },
- create: function () {function create(context) {
- var deprecated = new Map();
- var namespaces = new Map();
- function checkSpecifiers(node) {
- if (node.type !== 'ImportDeclaration') {return;}
- if (node.source == null) {return;}
- var imports = _ExportMap2['default'].get(node.source.value, context);
- if (imports == null) {return;}
- var moduleDeprecation = imports.doc && imports.doc.tags.find(function (t) {return t.title === 'deprecated';});
- if (moduleDeprecation) {
- context.report({ node: node, message: message(moduleDeprecation) });
- }
- if (imports.errors.length) {
- imports.reportErrors(context, node);
- return;
- }
- node.specifiers.forEach(function (im) {
- var imported = void 0;var local = void 0;
- switch (im.type) {
- case 'ImportNamespaceSpecifier':{
- if (!imports.size) {return;}
- namespaces.set(im.local.name, imports);
- return;
- }
- case 'ImportDefaultSpecifier':
- imported = 'default';
- local = im.local.name;
- break;
- case 'ImportSpecifier':
- imported = im.imported.name;
- local = im.local.name;
- break;
- default:return;
- }
-
- var exported = imports.get(imported);
- if (exported == null) {return;}
-
- if (exported.namespace) {namespaces.set(local, exported.namespace);}
- var deprecation = getDeprecation(imports.get(imported));
- if (!deprecation) {return;}
- context.report({ node: im, message: message(deprecation) });
- deprecated.set(local, deprecation);
- });
- }
- return {
- Program: function () {function Program(_ref) {var body = _ref.body;return body.forEach(checkSpecifiers);}return Program;}(),
- Identifier: function () {function Identifier(node) {
- if (node.parent.type === 'MemberExpression' && node.parent.property === node) {
- return;
- }
-
- if (node.parent.type.slice(0, 6) === 'Import') {return;}
- if (!deprecated.has(node.name)) {return;}
- if ((0, _declaredScope2['default'])(context, node.name) !== 'module') {return;}
- context.report({
- node: node,
- message: message(deprecated.get(node.name)) });
- }return Identifier;}(),
- MemberExpression: function () {function MemberExpression(dereference) {
- if (dereference.object.type !== 'Identifier') {return;}
- if (!namespaces.has(dereference.object.name)) {return;}
- if ((0, _declaredScope2['default'])(context, dereference.object.name) !== 'module') {return;}
-
- var namespace = namespaces.get(dereference.object.name);
- var namepath = [dereference.object.name];
-
- while (namespace instanceof _ExportMap2['default'] && dereference.type === 'MemberExpression') {
-
- if (dereference.computed) {return;}
- var metadata = namespace.get(dereference.property.name);
- if (!metadata) {break;}
- var deprecation = getDeprecation(metadata);
- if (deprecation) {
- context.report({ node: dereference.property, message: message(deprecation) });
- }
-
- namepath.push(dereference.property.name);
- namespace = metadata.namespace;
- dereference = dereference.parent;
- }
- }return MemberExpression;}() };
- }return create;}() };
|