@@ -216,22 +216,43 @@ def foo
216
216
assert_equal ( 11 , refs [ 2 ] . location . start_line )
217
217
end
218
218
219
- def test_finds_instance_variable_read_references
220
- refs = find_instance_variable_references ( "@foo" , <<~RUBY )
219
+ def test_finds_instance_variable_references
220
+ refs = find_instance_variable_references ( "@name" , [ "Foo" ] , <<~RUBY )
221
221
class Foo
222
- def foo
223
- @foo
222
+ def initialize
223
+ @name = "foo"
224
+ end
225
+ def name
226
+ @name
227
+ end
228
+ def name_capital
229
+ @name[0]
230
+ end
231
+ end
232
+
233
+ class Bar
234
+ def initialize
235
+ @name = "foo"
236
+ end
237
+ def name
238
+ @name
224
239
end
225
240
end
226
241
RUBY
227
- assert_equal ( 1 , refs . size )
242
+ assert_equal ( 3 , refs . size )
228
243
229
- assert_equal ( "@foo " , refs [ 0 ] . name )
244
+ assert_equal ( "@name " , refs [ 0 ] . name )
230
245
assert_equal ( 3 , refs [ 0 ] . location . start_line )
246
+
247
+ assert_equal ( "@name" , refs [ 1 ] . name )
248
+ assert_equal ( 6 , refs [ 1 ] . location . start_line )
249
+
250
+ assert_equal ( "@name" , refs [ 2 ] . name )
251
+ assert_equal ( 9 , refs [ 2 ] . location . start_line )
231
252
end
232
253
233
254
def test_finds_instance_variable_write_references
234
- refs = find_instance_variable_references ( "@foo" , <<~RUBY )
255
+ refs = find_instance_variable_references ( "@foo" , [ "Foo" ] , <<~RUBY )
235
256
class Foo
236
257
def write
237
258
@foo = 1
@@ -252,26 +273,70 @@ def write
252
273
assert_equal ( 7 , refs [ 4 ] . location . start_line )
253
274
end
254
275
255
- def test_finds_instance_variable_references_ignore_context
256
- refs = find_instance_variable_references ( "@name" , <<~RUBY )
257
- class Foo
276
+ def test_finds_instance_variable_references_in_owner_ancestors
277
+ refs = find_instance_variable_references ( "@name" , [ "Foo" , "Base" , "Top" , "Parent" ] , <<~RUBY )
278
+ module Base
279
+ def change_name(name)
280
+ @name = name
281
+ end
258
282
def name
283
+ @name
284
+ end
285
+
286
+ module ::Top
287
+ def name
288
+ @name
289
+ end
290
+ end
291
+ end
292
+
293
+ class Parent
294
+ def initialize
295
+ @name = "parent"
296
+ end
297
+ def name_capital
298
+ @name[0]
299
+ end
300
+ end
301
+
302
+ class Foo < Parent
303
+ include Base
304
+ def initialize
259
305
@name = "foo"
260
306
end
307
+ def name
308
+ @name
309
+ end
261
310
end
311
+
262
312
class Bar
263
313
def name
264
314
@name = "bar"
265
315
end
266
316
end
267
317
RUBY
268
- assert_equal ( 2 , refs . size )
318
+ assert_equal ( 7 , refs . size )
269
319
270
320
assert_equal ( "@name" , refs [ 0 ] . name )
271
321
assert_equal ( 3 , refs [ 0 ] . location . start_line )
272
322
273
323
assert_equal ( "@name" , refs [ 1 ] . name )
274
- assert_equal ( 8 , refs [ 1 ] . location . start_line )
324
+ assert_equal ( 6 , refs [ 1 ] . location . start_line )
325
+
326
+ assert_equal ( "@name" , refs [ 2 ] . name )
327
+ assert_equal ( 11 , refs [ 2 ] . location . start_line )
328
+
329
+ assert_equal ( "@name" , refs [ 3 ] . name )
330
+ assert_equal ( 18 , refs [ 3 ] . location . start_line )
331
+
332
+ assert_equal ( "@name" , refs [ 4 ] . name )
333
+ assert_equal ( 21 , refs [ 4 ] . location . start_line )
334
+
335
+ assert_equal ( "@name" , refs [ 5 ] . name )
336
+ assert_equal ( 28 , refs [ 5 ] . location . start_line )
337
+
338
+ assert_equal ( "@name" , refs [ 6 ] . name )
339
+ assert_equal ( 31 , refs [ 6 ] . location . start_line )
275
340
end
276
341
277
342
def test_accounts_for_reopened_classes
@@ -310,8 +375,8 @@ def find_method_references(method_name, source)
310
375
find_references ( target , source )
311
376
end
312
377
313
- def find_instance_variable_references ( instance_variable_name , source )
314
- target = ReferenceFinder ::InstanceVariableTarget . new ( instance_variable_name )
378
+ def find_instance_variable_references ( instance_variable_name , owner_ancestors , source )
379
+ target = ReferenceFinder ::InstanceVariableTarget . new ( instance_variable_name , owner_ancestors )
315
380
find_references ( target , source )
316
381
end
317
382
0 commit comments