@@ -131,84 +131,108 @@ module.exports = {
131
131
* @returns {Array } The matching patterns indexes. Return [Infinity] if there is no match.
132
132
*/
133
133
function getRefPropIndexes ( method ) {
134
- let isRegExp ;
135
- let matching ;
136
- let i ;
137
- let j ;
138
- const indexes = [ ] ;
134
+ const methodGroupIndexes = [ ] ;
139
135
140
- if ( method . getter ) {
141
- const getterIndex = methodsOrder . indexOf ( 'getters' ) ;
142
- if ( getterIndex >= 0 ) {
143
- indexes . push ( getterIndex ) ;
144
- }
145
- }
146
-
147
- if ( method . setter ) {
148
- const setterIndex = methodsOrder . indexOf ( 'setters' ) ;
149
- if ( setterIndex >= 0 ) {
150
- indexes . push ( setterIndex ) ;
151
- }
152
- }
136
+ for ( let groupIndex = 0 ; groupIndex < methodsOrder . length ; groupIndex ++ ) {
137
+ const currentGroup = methodsOrder [ groupIndex ] ;
153
138
154
- if ( method . typeAnnotation ) {
155
- const annotationIndex = methodsOrder . indexOf ( 'type-annotations' ) ;
156
- if ( annotationIndex >= 0 ) {
157
- indexes . push ( annotationIndex ) ;
158
- }
159
- }
160
-
161
- if ( indexes . length === 0 ) {
162
- for ( i = 0 , j = methodsOrder . length ; i < j ; i ++ ) {
163
- isRegExp = methodsOrder [ i ] . match ( regExpRegExp ) ;
164
- if ( isRegExp ) {
165
- matching = new RegExp ( isRegExp [ 1 ] , isRegExp [ 2 ] ) . test ( method . name ) ;
166
- } else {
167
- matching = methodsOrder [ i ] === method . name ;
139
+ switch ( currentGroup ) {
140
+ case 'getters' : {
141
+ if ( method . getter ) {
142
+ methodGroupIndexes . push ( groupIndex ) ;
143
+ }
144
+ break ;
168
145
}
169
- if ( matching ) {
170
- indexes . push ( i ) ;
146
+ case 'setters' : {
147
+ if ( method . setter ) {
148
+ methodGroupIndexes . push ( groupIndex ) ;
149
+ }
150
+ break ;
171
151
}
172
- }
173
- }
174
-
175
- if ( indexes . length === 0 && method . static ) {
176
- const staticIndex = methodsOrder . indexOf ( 'static-methods' ) ;
177
- if ( staticIndex >= 0 ) {
178
- indexes . push ( staticIndex ) ;
179
- }
180
- }
181
-
182
- if ( indexes . length === 0 && method . instanceVariable ) {
183
- const annotationIndex = methodsOrder . indexOf ( 'instance-variables' ) ;
184
- if ( annotationIndex >= 0 ) {
185
- indexes . push ( annotationIndex ) ;
186
- }
187
- }
188
-
189
- if ( indexes . length === 0 && method . instanceMethod ) {
190
- const annotationIndex = methodsOrder . indexOf ( 'instance-methods' ) ;
191
- if ( annotationIndex >= 0 ) {
192
- indexes . push ( annotationIndex ) ;
193
- }
194
- }
195
-
196
- // No matching pattern, return 'everything-else' index
197
- if ( indexes . length === 0 ) {
198
- for ( i = 0 , j = methodsOrder . length ; i < j ; i ++ ) {
199
- if ( methodsOrder [ i ] === 'everything-else' ) {
200
- indexes . push ( i ) ;
152
+ case 'type-annotations' : {
153
+ if ( method . typeAnnotation ) {
154
+ methodGroupIndexes . push ( groupIndex ) ;
155
+ }
156
+ break ;
157
+ }
158
+ case 'static-methods' : {
159
+ if ( method . static ) {
160
+ methodGroupIndexes . push ( groupIndex ) ;
161
+ }
162
+ break ;
163
+ }
164
+ case 'instance-variables' : {
165
+ if ( method . instanceVariable ) {
166
+ methodGroupIndexes . push ( groupIndex ) ;
167
+ }
168
+ break ;
169
+ }
170
+ case 'instance-methods' : {
171
+ if ( method . instanceMethod ) {
172
+ methodGroupIndexes . push ( groupIndex ) ;
173
+ }
174
+ break ;
175
+ }
176
+ case 'displayName' :
177
+ case 'propTypes' :
178
+ case 'contextTypes' :
179
+ case 'childContextTypes' :
180
+ case 'mixins' :
181
+ case 'statics' :
182
+ case 'defaultProps' :
183
+ case 'constructor' :
184
+ case 'getDefaultProps' :
185
+ case 'state' :
186
+ case 'getInitialState' :
187
+ case 'getChildContext' :
188
+ case 'getDerivedStateFromProps' :
189
+ case 'componentWillMount' :
190
+ case 'UNSAFE_componentWillMount' :
191
+ case 'componentDidMount' :
192
+ case 'componentWillReceiveProps' :
193
+ case 'UNSAFE_componentWillReceiveProps' :
194
+ case 'shouldComponentUpdate' :
195
+ case 'componentWillUpdate' :
196
+ case 'UNSAFE_componentWillUpdate' :
197
+ case 'getSnapshotBeforeUpdate' :
198
+ case 'componentDidUpdate' :
199
+ case 'componentDidCatch' :
200
+ case 'componentWillUnmount' :
201
+ case 'render' : {
202
+ if ( currentGroup === method . name ) {
203
+ methodGroupIndexes . push ( groupIndex ) ;
204
+ }
205
+ break ;
206
+ }
207
+ default : {
208
+ // Is the group a regex?
209
+ const isRegExp = currentGroup . match ( regExpRegExp ) ;
210
+ if ( isRegExp ) {
211
+ const isMatching = new RegExp ( isRegExp [ 1 ] , isRegExp [ 2 ] ) . test ( method . name ) ;
212
+ if ( isMatching ) {
213
+ methodGroupIndexes . push ( groupIndex ) ;
214
+ }
215
+ } else if ( currentGroup === method . name ) {
216
+ methodGroupIndexes . push ( groupIndex ) ;
217
+ }
201
218
break ;
202
219
}
203
220
}
204
221
}
205
222
206
- // No matching pattern and no 'everything-else' group
207
- if ( indexes . length === 0 ) {
208
- indexes . push ( Infinity ) ;
223
+ // No matching pattern, return 'everything-else' index
224
+ if ( methodGroupIndexes . length === 0 ) {
225
+ const everythingElseIndex = methodsOrder . indexOf ( 'everything-else' ) ;
226
+
227
+ if ( everythingElseIndex !== - 1 ) {
228
+ methodGroupIndexes . push ( everythingElseIndex ) ;
229
+ } else {
230
+ // No matching pattern and no 'everything-else' group
231
+ methodGroupIndexes . push ( Infinity ) ;
232
+ }
209
233
}
210
234
211
- return indexes ;
235
+ return methodGroupIndexes ;
212
236
}
213
237
214
238
/**
@@ -409,6 +433,10 @@ module.exports = {
409
433
410
434
// Loop around the properties a second time (for comparison)
411
435
for ( k = 0 , l = propertiesInfos . length ; k < l ; k ++ ) {
436
+ if ( i === k ) {
437
+ continue ;
438
+ }
439
+
412
440
propB = propertiesInfos [ k ] ;
413
441
414
442
// Compare the properties order
0 commit comments