diff options
| author | Ellen Marie Dash <me@duckie.co> | 2024-09-28 14:24:17 -0400 |
|---|---|---|
| committer | git <svn-admin@ruby-lang.org> | 2024-10-23 20:03:13 +0000 |
| commit | 35f0b7c83fbeac0fa13df253b90aea5919715a7f (patch) | |
| tree | 1e4e2033aa0d87cbaf8b65602ee14ed011d9c5c1 /lib | |
| parent | 5460d5b1193c9e899db9bbe455a2042c57ab4a09 (diff) | |
[rubygems/rubygems] [suggest_gems_from_name] Bail early if the value is guaranteed to be rejected.
https://github.com/rubygems/rubygems/commit/56262a9384
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/rubygems/spec_fetcher.rb | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/rubygems/spec_fetcher.rb b/lib/rubygems/spec_fetcher.rb index 9c0399f196..d6dd59e4bd 100644 --- a/lib/rubygems/spec_fetcher.rb +++ b/lib/rubygems/spec_fetcher.rb @@ -174,8 +174,17 @@ class Gem::SpecFetcher max = gem_name.size / 2 names = available_specs(type).first.values.flatten(1) + min_length = gem_name.length - max + max_length = gem_name.length + max + matches = names.map do |n| + len = n.name.length + # If the length is min_length or shorter, we've done `max` deletions. + # If the length is max_length or longer, we've done `max` insertions. + # These would both be rejected later, so we bail early for performance. + next if len <= min_length || len >= max_length next unless n.match_platform? + distance = levenshtein_distance gem_name, n.name.downcase.tr("_-", "") next if distance >= max return [n.name] if distance == 0 |
