55 */
66'use strict' ;
77
8+ var pragmaUtil = require ( '../util/pragma' ) ;
9+
810// ------------------------------------------------------------------------------
911// Constants
1012// ------------------------------------------------------------------------------
1113
1214var DEPRECATED_MESSAGE = '{{oldMethod}} is deprecated since React {{version}}{{newMethod}}' ;
1315
14- var DEPRECATED = {
15- MemberExpression : {
16- // 0.12.0
17- 'React.renderComponent' : [ '0.12.0' , 'React.render' ] ,
18- 'React.renderComponentToString' : [ '0.12.0' , 'React.renderToString' ] ,
19- 'React.renderComponentToStaticMarkup' : [ '0.12.0' , 'React.renderToStaticMarkup' ] ,
20- 'React.isValidComponent' : [ '0.12.0' , 'React.isValidElement' ] ,
21- 'React.PropTypes.component' : [ '0.12.0' , 'React.PropTypes.element' ] ,
22- 'React.PropTypes.renderable' : [ '0.12.0' , 'React.PropTypes.node' ] ,
23- 'React.isValidClass' : [ '0.12.0' ] ,
24- 'this.transferPropsTo' : [ '0.12.0' , 'spread operator ({...})' ] ,
25- // 0.13.0
26- 'React.addons.classSet' : [ '0.13.0' , 'the npm module classnames' ] ,
27- 'React.addons.cloneWithProps' : [ '0.13.0' , 'React.cloneElement' ] ,
28- // 0.14.0
29- 'React.render' : [ '0.14.0' , 'ReactDOM.render' ] ,
30- 'React.unmountComponentAtNode' : [ '0.14.0' , 'ReactDOM.unmountComponentAtNode' ] ,
31- 'React.findDOMNode' : [ '0.14.0' , 'ReactDOM.findDOMNode' ] ,
32- 'React.renderToString' : [ '0.14.0' , 'ReactDOMServer.renderToString' ] ,
33- 'React.renderToStaticMarkup' : [ '0.14.0' , 'ReactDOMServer.renderToStaticMarkup' ]
34- }
35- } ;
36-
3716// ------------------------------------------------------------------------------
3817// Rule Definition
3918// ------------------------------------------------------------------------------
@@ -48,6 +27,37 @@ module.exports = function(context) {
4827 return Number ( part ) ;
4928 } ) ;
5029
30+ var pragma = pragmaUtil . getFromContext ( context ) ;
31+
32+ function getDeprecated ( ) {
33+ var deprecated = {
34+ MemberExpression : { }
35+ } ;
36+ // 0.12.0
37+ deprecated . MemberExpression [ pragma + '.renderComponent' ] = [ '0.12.0' , pragma + '.render' ] ;
38+ deprecated . MemberExpression [ pragma + '.renderComponentToString' ] = [ '0.12.0' , pragma + '.renderToString' ] ;
39+ deprecated . MemberExpression [ pragma + '.renderComponentToStaticMarkup' ] = [
40+ '0.12.0' ,
41+ pragma + '.renderToStaticMarkup'
42+ ] ;
43+ deprecated . MemberExpression [ pragma + '.isValidComponent' ] = [ '0.12.0' , pragma + '.isValidElement' ] ;
44+ deprecated . MemberExpression [ pragma + '.PropTypes.component' ] = [ '0.12.0' , pragma + '.PropTypes.element' ] ;
45+ deprecated . MemberExpression [ pragma + '.PropTypes.renderable' ] = [ '0.12.0' , pragma + '.PropTypes.node' ] ;
46+ deprecated . MemberExpression [ pragma + '.isValidClass' ] = [ '0.12.0' ] ;
47+ deprecated . MemberExpression [ 'this.transferPropsTo' ] = [ '0.12.0' , 'spread operator ({...})' ] ;
48+ // 0.13.0
49+ deprecated . MemberExpression [ pragma + '.addons.classSet' ] = [ '0.13.0' , 'the npm module classnames' ] ;
50+ deprecated . MemberExpression [ pragma + '.addons.cloneWithProps' ] = [ '0.13.0' , pragma + '.cloneElement' ] ;
51+ // 0.14.0
52+ deprecated . MemberExpression [ pragma + '.render' ] = [ '0.14.0' , 'ReactDOM.render' ] ;
53+ deprecated . MemberExpression [ pragma + '.unmountComponentAtNode' ] = [ '0.14.0' , 'ReactDOM.unmountComponentAtNode' ] ;
54+ deprecated . MemberExpression [ pragma + '.findDOMNode' ] = [ '0.14.0' , 'ReactDOM.findDOMNode' ] ;
55+ deprecated . MemberExpression [ pragma + '.renderToString' ] = [ '0.14.0' , 'ReactDOMServer.renderToString' ] ;
56+ deprecated . MemberExpression [ pragma + '.renderToStaticMarkup' ] = [ '0.14.0' , 'ReactDOMServer.renderToStaticMarkup' ] ;
57+
58+ return deprecated ;
59+ }
60+
5161 function checkVersion ( methodVer ) {
5262 methodVer = methodVer . split ( '.' ) . map ( function ( part ) {
5363 return Number ( part ) ;
@@ -60,10 +70,12 @@ module.exports = function(context) {
6070 }
6171
6272 function isDeprecated ( type , method ) {
73+ var deprecated = getDeprecated ( ) ;
74+
6375 return (
64- DEPRECATED [ type ] &&
65- DEPRECATED [ type ] [ method ] &&
66- checkVersion ( DEPRECATED [ type ] [ method ] [ 0 ] )
76+ deprecated [ type ] &&
77+ deprecated [ type ] [ method ] &&
78+ checkVersion ( deprecated [ type ] [ method ] [ 0 ] )
6779 ) ;
6880 }
6981
@@ -78,11 +90,16 @@ module.exports = function(context) {
7890 if ( ! isDeprecated ( node . type , method ) ) {
7991 return ;
8092 }
93+ var deprecated = getDeprecated ( ) ;
8194 context . report ( node , DEPRECATED_MESSAGE , {
8295 oldMethod : method ,
83- version : DEPRECATED [ node . type ] [ method ] [ 0 ] ,
84- newMethod : DEPRECATED [ node . type ] [ method ] [ 1 ] ? ', use ' + DEPRECATED [ node . type ] [ method ] [ 1 ] + ' instead' : ''
96+ version : deprecated [ node . type ] [ method ] [ 0 ] ,
97+ newMethod : deprecated [ node . type ] [ method ] [ 1 ] ? ', use ' + deprecated [ node . type ] [ method ] [ 1 ] + ' instead' : ''
8598 } ) ;
99+ } ,
100+
101+ BlockComment : function ( node ) {
102+ pragma = pragmaUtil . getFromNode ( node ) || pragma ;
86103 }
87104
88105 } ;
0 commit comments