@@ -46,6 +46,7 @@ module.exports = Components.detect(function(context, components) {
46
46
47
47
var methodsOrder = getMethodsOrder ( {
48
48
order : [
49
+ 'static-methods' ,
49
50
'lifecycle' ,
50
51
'everything-else' ,
51
52
'render'
@@ -83,7 +84,7 @@ module.exports = Components.detect(function(context, components) {
83
84
84
85
/**
85
86
* Get indexes of the matching patterns in methods order configuration
86
- * @param {String } method - Method name .
87
+ * @param {Object } method - Method metadata .
87
88
* @returns {Array } The matching patterns indexes. Return [Infinity] if there is no match.
88
89
*/
89
90
function getRefPropIndexes ( method ) {
@@ -92,15 +93,28 @@ module.exports = Components.detect(function(context, components) {
92
93
var i ;
93
94
var j ;
94
95
var indexes = [ ] ;
95
- for ( i = 0 , j = methodsOrder . length ; i < j ; i ++ ) {
96
- isRegExp = methodsOrder [ i ] . match ( regExpRegExp ) ;
97
- if ( isRegExp ) {
98
- matching = new RegExp ( isRegExp [ 1 ] , isRegExp [ 2 ] ) . test ( method ) ;
99
- } else {
100
- matching = methodsOrder [ i ] === method ;
96
+
97
+ if ( method . static ) {
98
+ for ( i = 0 , j = methodsOrder . length ; i < j ; i ++ ) {
99
+ if ( methodsOrder [ i ] === 'static-methods' ) {
100
+ indexes . push ( i ) ;
101
+ }
101
102
}
102
- if ( matching ) {
103
- indexes . push ( i ) ;
103
+ }
104
+
105
+ // Either this is not a static method or static methods are not specified
106
+ // in the methodsOrder.
107
+ if ( indexes . length === 0 ) {
108
+ for ( i = 0 , j = methodsOrder . length ; i < j ; i ++ ) {
109
+ isRegExp = methodsOrder [ i ] . match ( regExpRegExp ) ;
110
+ if ( isRegExp ) {
111
+ matching = new RegExp ( isRegExp [ 1 ] , isRegExp [ 2 ] ) . test ( method . name ) ;
112
+ } else {
113
+ matching = methodsOrder [ i ] === method . name ;
114
+ }
115
+ if ( matching ) {
116
+ indexes . push ( i ) ;
117
+ }
104
118
}
105
119
}
106
120
@@ -127,7 +141,6 @@ module.exports = Components.detect(function(context, components) {
127
141
* @returns {String } Property name.
128
142
*/
129
143
function getPropertyName ( node ) {
130
-
131
144
// Special case for class properties
132
145
// (babel-eslint does not expose property name so we have to rely on tokens)
133
146
if ( node . type === 'ClassProperty' ) {
@@ -236,12 +249,12 @@ module.exports = Components.detect(function(context, components) {
236
249
237
250
/**
238
251
* Compare two properties and find out if they are in the right order
239
- * @param {Array } propertiesNames Array containing all the properties names .
240
- * @param {String } propA First property name.
241
- * @param {String } propB Second property name.
252
+ * @param {Array } propertiesInfos Array containing all the properties metadata .
253
+ * @param {Object } propA First property name and metadata
254
+ * @param {Object } propB Second property name.
242
255
* @returns {Object } Object containing a correct true/false flag and the correct indexes for the two properties.
243
256
*/
244
- function comparePropsOrder ( propertiesNames , propA , propB ) {
257
+ function comparePropsOrder ( propertiesInfos , propA , propB ) {
245
258
var i ;
246
259
var j ;
247
260
var k ;
@@ -254,8 +267,8 @@ module.exports = Components.detect(function(context, components) {
254
267
var refIndexesB = getRefPropIndexes ( propB ) ;
255
268
256
269
// Get current indexes for given properties
257
- var classIndexA = propertiesNames . indexOf ( propA ) ;
258
- var classIndexB = propertiesNames . indexOf ( propB ) ;
270
+ var classIndexA = propertiesInfos . indexOf ( propA ) ;
271
+ var classIndexB = propertiesInfos . indexOf ( propB ) ;
259
272
260
273
// Loop around the references indexes for the 1st property
261
274
for ( i = 0 , j = refIndexesA . length ; i < j ; i ++ ) {
@@ -296,7 +309,13 @@ module.exports = Components.detect(function(context, components) {
296
309
* @param {Array } properties Array containing all the properties.
297
310
*/
298
311
function checkPropsOrder ( properties ) {
299
- var propertiesNames = properties . map ( getPropertyName ) ;
312
+ var propertiesInfos = properties . map ( function ( node ) {
313
+ return {
314
+ name : getPropertyName ( node ) ,
315
+ static : node . static
316
+ } ;
317
+ } ) ;
318
+
300
319
var i ;
301
320
var j ;
302
321
var k ;
@@ -306,15 +325,15 @@ module.exports = Components.detect(function(context, components) {
306
325
var order ;
307
326
308
327
// Loop around the properties
309
- for ( i = 0 , j = propertiesNames . length ; i < j ; i ++ ) {
310
- propA = propertiesNames [ i ] ;
328
+ for ( i = 0 , j = propertiesInfos . length ; i < j ; i ++ ) {
329
+ propA = propertiesInfos [ i ] ;
311
330
312
331
// Loop around the properties a second time (for comparison)
313
- for ( k = 0 , l = propertiesNames . length ; k < l ; k ++ ) {
314
- propB = propertiesNames [ k ] ;
332
+ for ( k = 0 , l = propertiesInfos . length ; k < l ; k ++ ) {
333
+ propB = propertiesInfos [ k ] ;
315
334
316
335
// Compare the properties order
317
- order = comparePropsOrder ( propertiesNames , propA , propB ) ;
336
+ order = comparePropsOrder ( propertiesInfos , propA , propB ) ;
318
337
319
338
// Continue to next comparison is order is correct
320
339
if ( order . correct === true ) {
0 commit comments