@@ -131,84 +131,91 @@ 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 = [ ] ;
139
-
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
- }
153
-
154
- if ( method . typeAnnotation ) {
155
- const annotationIndex = methodsOrder . indexOf ( 'type-annotations' ) ;
156
- if ( annotationIndex >= 0 ) {
157
- indexes . push ( annotationIndex ) ;
158
- }
159
- }
134
+ const methodGroupIndexes = [ ] ;
160
135
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 ;
136
+ methodsOrder . forEach ( ( currentGroup , groupIndex ) => {
137
+ if ( currentGroup === 'getters' ) {
138
+ if ( method . getter ) {
139
+ methodGroupIndexes . push ( groupIndex ) ;
168
140
}
169
- if ( matching ) {
170
- indexes . push ( i ) ;
141
+ } else if ( currentGroup === 'setters' ) {
142
+ if ( method . setter ) {
143
+ methodGroupIndexes . push ( groupIndex ) ;
144
+ }
145
+ } else if ( currentGroup === 'type-annotations' ) {
146
+ if ( method . typeAnnotation ) {
147
+ methodGroupIndexes . push ( groupIndex ) ;
148
+ }
149
+ } else if ( currentGroup === 'static-methods' ) {
150
+ if ( method . static ) {
151
+ methodGroupIndexes . push ( groupIndex ) ;
152
+ }
153
+ } else if ( currentGroup === 'instance-variables' ) {
154
+ if ( method . instanceVariable ) {
155
+ methodGroupIndexes . push ( groupIndex ) ;
156
+ }
157
+ } else if ( currentGroup === 'instance-methods' ) {
158
+ if ( method . instanceMethod ) {
159
+ methodGroupIndexes . push ( groupIndex ) ;
160
+ }
161
+ } else if ( [
162
+ 'displayName' ,
163
+ 'propTypes' ,
164
+ 'contextTypes' ,
165
+ 'childContextTypes' ,
166
+ 'mixins' ,
167
+ 'statics' ,
168
+ 'defaultProps' ,
169
+ 'constructor' ,
170
+ 'getDefaultProps' ,
171
+ 'state' ,
172
+ 'getInitialState' ,
173
+ 'getChildContext' ,
174
+ 'getDerivedStateFromProps' ,
175
+ 'componentWillMount' ,
176
+ 'UNSAFE_componentWillMount' ,
177
+ 'componentDidMount' ,
178
+ 'componentWillReceiveProps' ,
179
+ 'UNSAFE_componentWillReceiveProps' ,
180
+ 'shouldComponentUpdate' ,
181
+ 'componentWillUpdate' ,
182
+ 'UNSAFE_componentWillUpdate' ,
183
+ 'getSnapshotBeforeUpdate' ,
184
+ 'componentDidUpdate' ,
185
+ 'componentDidCatch' ,
186
+ 'componentWillUnmount' ,
187
+ 'render'
188
+ ] . includes ( currentGroup ) ) {
189
+ if ( currentGroup === method . name ) {
190
+ methodGroupIndexes . push ( groupIndex ) ;
191
+ }
192
+ } else {
193
+ // Is the group a regex?
194
+ const isRegExp = currentGroup . match ( regExpRegExp ) ;
195
+ if ( isRegExp ) {
196
+ const isMatching = new RegExp ( isRegExp [ 1 ] , isRegExp [ 2 ] ) . test ( method . name ) ;
197
+ if ( isMatching ) {
198
+ methodGroupIndexes . push ( groupIndex ) ;
199
+ }
200
+ } else if ( currentGroup === method . name ) {
201
+ methodGroupIndexes . push ( groupIndex ) ;
171
202
}
172
203
}
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
- }
204
+ } ) ;
195
205
196
206
// 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 ) ;
201
- break ;
202
- }
203
- }
204
- }
207
+ if ( methodGroupIndexes . length === 0 ) {
208
+ const everythingElseIndex = methodsOrder . indexOf ( 'everything-else' ) ;
205
209
206
- // No matching pattern and no 'everything-else' group
207
- if ( indexes . length === 0 ) {
208
- indexes . push ( Infinity ) ;
210
+ if ( everythingElseIndex !== - 1 ) {
211
+ methodGroupIndexes . push ( everythingElseIndex ) ;
212
+ } else {
213
+ // No matching pattern and no 'everything-else' group
214
+ methodGroupIndexes . push ( Infinity ) ;
215
+ }
209
216
}
210
217
211
- return indexes ;
218
+ return methodGroupIndexes ;
212
219
}
213
220
214
221
/**
@@ -409,6 +416,10 @@ module.exports = {
409
416
410
417
// Loop around the properties a second time (for comparison)
411
418
for ( k = 0 , l = propertiesInfos . length ; k < l ; k ++ ) {
419
+ if ( i === k ) {
420
+ continue ;
421
+ }
422
+
412
423
propB = propertiesInfos [ k ] ;
413
424
414
425
// Compare the properties order
0 commit comments