summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2021-09-17 20:30:16 +0900
committergit <svn-admin@ruby-lang.org>2021-09-21 23:28:14 +0900
commitee53d97b16fdf13e14e1a4a89c31e2a621ddbd66 (patch)
tree0d579137cac9b7b4cb4af4285fd445d9f0f4e0f7
parentc94718e39fdeca4ae2079b7be64e42023e846aa3 (diff)
[ruby/irb] Sort shortest files in each load paths
There are two directories where csv*/**/*.rb exist, lib/ and test/, and depending on the order of tests, test/ may be placed before lib/. In that case, as "shortest" names were not sorted, csv/helper.rb will be the first candidate for "csv". https://github.com/ruby/irb/commit/2af7c6bf71
-rw-r--r--lib/irb/completion.rb28
1 files changed, 16 insertions, 12 deletions
diff --git a/lib/irb/completion.rb b/lib/irb/completion.rb
index 57521025f0..74034893b8 100644
--- a/lib/irb/completion.rb
+++ b/lib/irb/completion.rb
@@ -64,18 +64,22 @@ module IRB
end
def self.retrieve_files_to_require_from_load_path
- @@files_from_load_path ||= retrieve_gem_and_system_load_path.map { |path|
- begin
- Dir.glob("**/*.{rb,#{RbConfig::CONFIG['DLEXT']}}", base: path)
- rescue Errno::ENOENT
- []
- end
- }.inject([]) { |result, names|
- shortest, *rest = names.map{ |n| n.sub(/\.(rb|#{RbConfig::CONFIG['DLEXT']})\z/, '') }.sort
- result.unshift(shortest) if shortest
- result.concat(rest)
- result
- }.uniq
+ @@files_from_load_path ||=
+ (
+ shortest = []
+ rest = retrieve_gem_and_system_load_path.each_with_object([]) { |path, result|
+ begin
+ names = Dir.glob("**/*.{rb,#{RbConfig::CONFIG['DLEXT']}}", base: path)
+ rescue Errno::ENOENT
+ nil
+ end
+ next if names.empty?
+ names.map! { |n| n.sub(/\.(rb|#{RbConfig::CONFIG['DLEXT']})\z/, '') }.sort!
+ shortest << names.shift
+ result.concat(names)
+ }
+ shortest.sort! | rest
+ )
end
def self.retrieve_files_to_require_relative_from_current_dir