Update spec_set to use lookup#9480
Merged
eileencodes merged 1 commit intoruby:masterfrom Apr 14, 2026
Merged
Conversation
6ff81b3 to
3a90d24
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What was the end-user or developer problem that led to this PR?
Bundler::SpecSetalready maintains a name-indexed lookup of specs (lookup), but#find_by_name_and_platformand the specialrakehandling in#sortedwere still scanning@specsdirectly.That meant these methods were not taking advantage of the existing indexed structure in the class, even though equivalent information was already available through
lookup. The goal of this PR is to make those methods consistent with the rest ofSpecSetby reusing the existing lookup instead of doing additional scans.What is your fix for the problem, implemented in this PR?
This PR updates both call sites to use the existing name-indexed lookup:
#find_by_name_and_platformnow useslookup[name]&.detect { ... }instead of scanning all of@specs#sortednow useslookup["rake"]&.firstinstead of@specs.find { ... }for the special-caserakepreloading behaviour.The behaviour is intended to remain unchanged.
I also expanded the spec coverage in
spec/bundler/spec_set_spec.rbto cover the important regression cases around the refactor:nilwhen the name is missingnilwhen the name exists but no spec is installable on the requested platformrakeordering behaviour in#to_aMake sure the following tasks are checked