@@ -35,24 +35,34 @@ def perform
3535
3636 #: -> Array[String]
3737 def find_relevant_paths
38- candidate_paths = Dir . glob ( File . join ( "**" , relevant_filename_pattern ) )
39- return [ ] if candidate_paths . empty?
40-
41- find_most_similar_with_jaccard ( candidate_paths ) . map { File . join ( @workspace_path , _1 ) }
42- end
38+ input_basename = File . basename ( @path , ".rb" )
4339
44- #: -> String
45- def relevant_filename_pattern
46- input_basename = File . basename ( @path , File . extname ( @path ) )
40+ patterns = if input_basename . match? ( TEST_PATTERN )
41+ # Test file -> find implementation
42+ base = input_basename . gsub ( TEST_PATTERN , "" )
43+ parent_dir = File . basename ( File . dirname ( @path ) )
4744
48- relevant_basename_pattern =
49- if input_basename . match? ( TEST_PATTERN )
50- input_basename . gsub ( TEST_PATTERN , "" )
45+ # If test file is in a directory matching the implementation name (e.g., go_to_relevant_file/go_to_relevant_file_a_test.rb)
46+ # also search for the parent directory name as the implementation file name
47+ if base . include? ( parent_dir ) && base != parent_dir
48+ [ "**/#{ base } .rb" , "**/#{ parent_dir } .rb" ]
5149 else
52- "{{ #{ TEST_PREFIX_GLOB } } #{ input_basename } , #{ input_basename } { #{ TEST_SUFFIX_GLOB } }}"
50+ [ "**/ #{ base } .rb" ]
5351 end
52+ else
53+ # Implementation file -> find tests (including in matching directory)
54+ [
55+ "**/{#{ TEST_PREFIX_GLOB } }#{ input_basename } .rb" ,
56+ "**/#{ input_basename } {#{ TEST_SUFFIX_GLOB } }.rb" ,
57+ "**/#{ input_basename } /{#{ TEST_PREFIX_GLOB } }*.rb" ,
58+ "**/#{ input_basename } /*{#{ TEST_SUFFIX_GLOB } }.rb" ,
59+ ]
60+ end
61+
62+ candidate_paths = patterns . flat_map { |pattern | Dir . glob ( pattern , base : @workspace_path ) }
63+ return [ ] if candidate_paths . empty?
5464
55- " #{ relevant_basename_pattern } #{ File . extname ( @ path) } "
65+ find_most_similar_with_jaccard ( candidate_paths ) . map { | path | File . join ( @workspace_path , path ) }
5666 end
5767
5868 # Using the Jaccard algorithm to determine the similarity between the
0 commit comments