Skip to content

Avoid allocations in PyPI and Composer validation - #48

Merged
andrew merged 1 commit into
mainfrom
perf/pypi-composer-validation
Sep 14, 2026
Merged

andrew merged 1 commit into
mainfrom
perf/pypi-composer-validation

Conversation

@andrew

@andrew andrew commented Sep 13, 2026

Copy link
Copy Markdown
Contributor

Validate PyPI and Composer versions without constructing parsed version components. Keep Composer's recognized stability labels and existing handling of branch versions and Unicode case folding.

For plain and prerelease versions passed through purl.CleanVersion, this removes three allocations per call: about 401 bytes for PyPI and 176 bytes for Composer, both reduced to zero.

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 issues block approval.

Pull request overview

This pull request optimizes PyPI and Composer version validation by replacing parsed-version allocations with direct regex checks while preserving existing behavior.

Changes:

  • Uses direct PEP 440 regex matching for PyPI validation.
  • Adds allocation-free Composer validation.
  • Adds benchmarks, fuzz coverage, and regression tests.
File summaries
File Summary
validation_bench_test.go Adds validation benchmarks and regression coverage.
normalization.go Uses direct regex matching for PyPI validation.
composer_pub.go Adds allocation-free Composer version validation.
Review details
  • Files reviewed: 3/3 changed files
  • Comments generated: 0
  • Review effort level: Lite

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

@andrew
andrew merged commit f6a93d6 into main Sep 14, 2026
6 checks passed
@andrew
andrew deleted the perf/pypi-composer-validation branch September 14, 2026 02:14
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