Skip to content

Reduce npm lockfile parsing allocations - #95

Merged
andrew merged 3 commits into
mainfrom
bench/npm-lockfiles
Sep 14, 2026
Merged

andrew merged 3 commits into
mainfrom
bench/npm-lockfiles

Conversation

@andrew

@andrew andrew commented Sep 13, 2026 •

Copy link
Copy Markdown
Contributor

Preallocate the dependency slice when parsing npm lockfiles and iterate v2/v3 lines without allocating a slice of every line. For lockfiles with 10,000 packages, this reduces allocated bytes by 41% for v1 and 45% for v3.

Also fix duplicate dependencies when parsing v2 lockfiles with CRLF line endings: stop at the end of packages instead of continuing into the legacy dependencies section.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

An unresolved CRLF parsing bug can produce duplicate dependencies.

Get a fresh assessment by requesting another Copilot review.

Pull request overview

Reduces allocations in npm lockfile parsing while preserving parsing behavior, with added benchmarks and regression coverage.

Changes:

  • Preallocates dependency results for v1 parsing.
  • Uses iterator-based line parsing for v2/v3.
  • Adds allocation benchmarks and edge-case tests.
File summaries
File Summary
npm_bench_test.go Adds large-lockfile benchmarks.
npm_allocation_test.go Adds allocation and parsing regression tests.
internal/npm/npm.go Optimizes parsing; requires CRLF section termination handling to avoid duplicate dependencies.
Review details
  • Files reviewed: 3/3 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread internal/npm/npm.go

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 Approval recommended

No unresolved review comments were identified.

Review details
  • Files reviewed: 4/4 changed files
  • Comments generated: 0 new
  • Review effort level: Lite

@andrew
andrew merged commit 11a7738 into main Sep 14, 2026
4 checks passed
@andrew
andrew deleted the bench/npm-lockfiles branch September 14, 2026 02:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants