Skip to content

Commit 5698a0e

Browse files
committed
Support multiple test file matches in go to relevant file
1 parent 8c7819a commit 5698a0e

File tree

1 file changed

+23
-13
lines changed

1 file changed

+23
-13
lines changed

lib/ruby_lsp/requests/go_to_relevant_file.rb

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)