@@ -124,51 +124,15 @@ namespace ts.refactor {
124
124
let firstReferencedStatement : Statement | undefined ;
125
125
const referencedAccessExpression : [ AccessExpression , string ] [ ] = [ ] ;
126
126
const allReferencedAcccessExpression : AccessExpression [ ] = [ ] ;
127
- const container = isParameter ( symbol . valueDeclaration ) ?
128
- symbol . valueDeclaration :
129
- findAncestor ( symbol . valueDeclaration , or ( isStatement , isSourceFile ) ) ;
127
+ const container = isParameter ( symbol . valueDeclaration ) ? symbol . valueDeclaration : findAncestor ( symbol . valueDeclaration , or ( isStatement , isSourceFile ) ) ;
130
128
Debug . assertIsDefined ( container ) ;
131
-
132
129
forEach ( references , reference => {
133
130
if ( reference . kind !== FindAllReferences . EntryKind . Node ) {
134
- return undefined ;
135
- }
136
-
137
- let lastChild = reference . node ;
138
- const topReferencedAccessExpression = findAncestor ( reference . node . parent , n => {
139
- if ( isParenthesizedExpression ( n ) ) {
140
- lastChild = n ;
141
- return false ;
142
- }
143
- else if ( isAccessExpression ( n ) ) {
144
- if ( n . expression === lastChild ) {
145
- return true ;
146
- }
147
- lastChild = n ;
148
- return false ;
149
- }
150
- return "quit" ;
151
- } ) ;
152
- if ( ! topReferencedAccessExpression ) {
153
131
return ;
154
132
}
155
133
156
- const accessExpression = cast ( topReferencedAccessExpression , isAccessExpression ) ;
157
- allReferencedAcccessExpression . push ( accessExpression ) ;
158
-
159
- if ( isAssignmentTarget ( accessExpression ) ) {
160
- return ;
161
- }
162
-
163
- const referencedParentMaybeCall = skipParenthesesUp ( accessExpression . parent ) ;
164
- if ( isCallOrNewExpression ( referencedParentMaybeCall ) && ! ( referencedParentMaybeCall . arguments && rangeContainsRange ( referencedParentMaybeCall . arguments , topReferencedAccessExpression ) ) ) {
165
- return ;
166
- }
167
-
168
- if ( reference . node . pos < symbol . valueDeclaration . pos ) {
169
- return ;
170
- }
171
- if ( isFunctionLikeDeclaration ( container . parent ) && container . parent . body && ! rangeContainsRange ( container . parent . body , reference . node ) ) {
134
+ const accessExpression = getAccessExpressionIfValidReference ( reference . node , symbol , container , allReferencedAcccessExpression ) ;
135
+ if ( ! accessExpression ) {
172
136
return ;
173
137
}
174
138
@@ -223,6 +187,7 @@ namespace ts.refactor {
223
187
}
224
188
}
225
189
} ) ;
190
+ if ( hasUnconvertableReference ) return undefined ;
226
191
227
192
if ( resolveUniqueName ) {
228
193
forEach ( referencedAccessExpression , ( [ , name ] ) => {
@@ -233,7 +198,6 @@ namespace ts.refactor {
233
198
} ) ;
234
199
}
235
200
236
- if ( hasUnconvertableReference ) return undefined ;
237
201
return {
238
202
replacementExpression : node . parent . expression ,
239
203
firstReferenced,
@@ -242,4 +206,46 @@ namespace ts.refactor {
242
206
namesNeedUniqueName
243
207
} ;
244
208
}
209
+
210
+ function getAccessExpressionIfValidReference ( node : Node , symbol : Symbol , container : Node , allReferencedAcccessExpression : Node [ ] ) : AccessExpression | undefined {
211
+ let lastChild = node ;
212
+ const topReferencedAccessExpression = findAncestor ( node . parent , n => {
213
+ if ( isParenthesizedExpression ( n ) ) {
214
+ lastChild = n ;
215
+ return false ;
216
+ }
217
+ else if ( isAccessExpression ( n ) ) {
218
+ if ( n . expression === lastChild ) {
219
+ return true ;
220
+ }
221
+ lastChild = n ;
222
+ return false ;
223
+ }
224
+ return "quit" ;
225
+ } ) ;
226
+ if ( ! topReferencedAccessExpression ) {
227
+ return undefined ;
228
+ }
229
+
230
+ const accessExpression = cast ( topReferencedAccessExpression , isAccessExpression ) ;
231
+ allReferencedAcccessExpression . push ( accessExpression ) ;
232
+
233
+ if ( isAssignmentTarget ( accessExpression ) ) {
234
+ return undefined ;
235
+ }
236
+
237
+ const referencedParentMaybeCall = skipParenthesesUp ( accessExpression . parent ) ;
238
+ if ( isCallOrNewExpression ( referencedParentMaybeCall ) && ! ( referencedParentMaybeCall . arguments && rangeContainsRange ( referencedParentMaybeCall . arguments , topReferencedAccessExpression ) ) ) {
239
+ return undefined ;
240
+ }
241
+
242
+ if ( node . pos < symbol . valueDeclaration . pos ) {
243
+ return undefined ;
244
+ }
245
+ if ( isFunctionLikeDeclaration ( container . parent ) && container . parent . body && ! rangeContainsRange ( container . parent . body , node ) ) {
246
+ return undefined ;
247
+ }
248
+
249
+ return accessExpression ;
250
+ }
245
251
}
0 commit comments