deps: remove samber/lo in favor of local uniqBy#2463
Open
deps: remove samber/lo in favor of local uniqBy#2463
Conversation
Replace github.com/samber/lo with a minimal generic uniqBy function implemented locally in each package. samber/lo was only used for UniqBy to deduplicate library slices. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Verify that uniqBy correctly deduplicates slices preserving first occurrence, handles empty slices, and works with struct key functions. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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.
Why (motivation for removing this dependency)
samber/lois a lodash-style utility library for Go with genericslo.UniqByis used (2 call sites). Pulling in a 5000+ line utility library for a single 12-line function is excessiveWhat (replacement details)
lo.UniqBywith a localuniqBy[T, K]generic function (12 lines each)detector/library.go: replacedlo.UniqBycall with localuniqBydetector/util.go: addeduniqByimplementationscanner/trivy/jar/parse.go: replacedlo.UniqBycall + added localuniqByimplementationTwo separate implementations because the packages cannot share a common utility without risking import cycles.
Safety (why this is safe)
lo.UniqBy[T any, K comparable]) match the originalTest plan
TestUniqBy(detector) - empty slice, no duplicates, duplicates removed (first kept), struct key extractionTestUniqBy(scanner/trivy/jar) - same 4 casesgo build ./cmd/...passgo test ./detector/... ./scanner/trivy/jar/...passReview hint (how to review efficiently)
uniqByindetector/util.go(12 lines) — this is the core logicscanner/trivy/jar/parse.gohas an identical copy (separate package, no import cycle)detector/library.goandscanner/trivy/jar/parse.goare trivial renames:lo.UniqBy->uniqBy🤖 Generated with Claude Code