-
-
Notifications
You must be signed in to change notification settings - Fork 2.8k
/
no-deprecated.js
111 lines (94 loc) · 4.27 KB
/
no-deprecated.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/**
* @fileoverview Prevent usage of deprecated methods
* @author Yannick Croissant
* @author Scott Feeney
*/
'use strict';
var pragmaUtil = require('../util/pragma');
var versionUtil = require('../util/version');
// ------------------------------------------------------------------------------
// Constants
// ------------------------------------------------------------------------------
var DEPRECATED_MESSAGE = '{{oldMethod}} is deprecated since React {{version}}{{newMethod}}';
// ------------------------------------------------------------------------------
// Rule Definition
// ------------------------------------------------------------------------------
module.exports = {
meta: {
docs: {
description: 'Prevent usage of deprecated methods',
category: 'Best Practices',
recommended: true
},
schema: []
},
create: function(context) {
var sourceCode = context.getSourceCode();
var pragma = pragmaUtil.getFromContext(context);
function getDeprecated() {
var deprecated = {
MemberExpression: {}
};
// 0.12.0
deprecated.MemberExpression[`${pragma}.renderComponent`] = ['0.12.0', `${pragma}.render`];
deprecated.MemberExpression[`${pragma}.renderComponentToString`] = ['0.12.0', `${pragma}.renderToString`];
deprecated.MemberExpression[`${pragma}.renderComponentToStaticMarkup`] = [
'0.12.0',
`${pragma}.renderToStaticMarkup`
];
deprecated.MemberExpression[`${pragma}.isValidComponent`] = ['0.12.0', `${pragma}.isValidElement`];
deprecated.MemberExpression[`${pragma}.PropTypes.component`] = ['0.12.0', `${pragma}.PropTypes.element`];
deprecated.MemberExpression[`${pragma}.PropTypes.renderable`] = ['0.12.0', `${pragma}.PropTypes.node`];
deprecated.MemberExpression[`${pragma}.isValidClass`] = ['0.12.0'];
deprecated.MemberExpression['this.transferPropsTo'] = ['0.12.0', 'spread operator ({...})'];
// 0.13.0
deprecated.MemberExpression[`${pragma}.addons.classSet`] = ['0.13.0', 'the npm module classnames'];
deprecated.MemberExpression[`${pragma}.addons.cloneWithProps`] = ['0.13.0', `${pragma}.cloneElement`];
// 0.14.0
deprecated.MemberExpression[`${pragma}.render`] = ['0.14.0', 'ReactDOM.render'];
deprecated.MemberExpression[`${pragma}.unmountComponentAtNode`] = ['0.14.0', 'ReactDOM.unmountComponentAtNode'];
deprecated.MemberExpression[`${pragma}.findDOMNode`] = ['0.14.0', 'ReactDOM.findDOMNode'];
deprecated.MemberExpression[`${pragma}.renderToString`] = ['0.14.0', 'ReactDOMServer.renderToString'];
deprecated.MemberExpression[`${pragma}.renderToStaticMarkup`] = ['0.14.0', 'ReactDOMServer.renderToStaticMarkup'];
// 15.0.0
deprecated.MemberExpression[`${pragma}.addons.LinkedStateMixin`] = ['15.0.0'];
deprecated.MemberExpression['ReactPerf.printDOM'] = ['15.0.0', 'ReactPerf.printOperations'];
deprecated.MemberExpression['Perf.printDOM'] = ['15.0.0', 'Perf.printOperations'];
deprecated.MemberExpression['ReactPerf.getMeasurementsSummaryMap'] = ['15.0.0', 'ReactPerf.getWasted'];
deprecated.MemberExpression['Perf.getMeasurementsSummaryMap'] = ['15.0.0', 'Perf.getWasted'];
return deprecated;
}
function isDeprecated(type, method) {
var deprecated = getDeprecated();
return (
deprecated[type] &&
deprecated[type][method] &&
versionUtil.test(context, deprecated[type][method][0])
);
}
// --------------------------------------------------------------------------
// Public
// --------------------------------------------------------------------------
return {
MemberExpression: function(node) {
var method = sourceCode.getText(node);
if (!isDeprecated(node.type, method)) {
return;
}
var deprecated = getDeprecated();
context.report({
node: node,
message: DEPRECATED_MESSAGE,
data: {
oldMethod: method,
version: deprecated[node.type][method][0],
newMethod: deprecated[node.type][method][1] ? `, use ${deprecated[node.type][method][1]} instead` : ''
}
});
},
BlockComment: function(node) {
pragma = pragmaUtil.getFromNode(node) || pragma;
}
};
}
};