Drive pdm.lock and poetry.lock rewrites through one lock_fragments driver instead of two mirrored triads

Offen
#1,844 3 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

@mikolalysenko arbeitet bereits daran.

Seit 01.11.2026.

  • #1898 von @mikolalysenko — offen

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
35/100
Issue-Typ
Refactoring
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
rust
Bereich
backend

Rechercherichtung

Start by reading crates/socket-patch-core/src/utils/lock_fragments.rs, pdm_lock.rs, and poetry_lock.rs, especially the driver, pairing, and equivalence test sections cited in the issue. Then trace the listed call sites in redirect/pdm.rs, redirect/poetry.rs, vendor/pypi_pdm.rs, and vendor/pypi_poetry.rs. Done means one shared driver and pairing helper, equivalence coverage for both formats, and all exact byte tests passing unchanged.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

agent:claimed agent:triaged arch-audit priority:p1 refactor

[agent] Filed by the scheduled architecture audit (audit-core). Register: register.

Kind: refactor. Register ID: A05.

Problem

utils/pdm_lock.rs and utils/poetry_lock.rs each carry the same driver around utils::lock_fragments:

  • Poetry has rewrite_poetry_lock / _with_edits / _in / _all / _all_with_version / _batch / _steps: poetry_lock.rs L426-L731.
  • PDM has the mirror: pdm_lock.rs L136-L353.
  • The test modules are mirrored too. parse_reuse_equivalence_tests and batch_equivalence_tests exist in both files, and the "fragments changed shape" test exists three times (lock_fragments L595, pdm_lock L921, poetry_lock).

The _steps loops have already drifted:

Inside lock_fragments itself, fragment pairing is written three times, and the copies disagree on how uniqueness is counted:

  • pair_fragments L191-L210 counts non-overlapping matches on both sides.
  • the finish loop L316-L336 checks old in the text and new in the spliced result.
  • rewrite_batch L473-L495 counts overlapping sole_occurrences.
  • The shape-change length check is repeated at L198, L322 and L477.
Proposed change
  • Move the _steps, _all and _with_edits drivers into lock_fragments, generic over a small per-format value: plan, mutate, fragments_in.
  • Delete the per-format wrappers and the PoetryLockRewrite/PoetryLockParse aliases.
  • Have finish and rewrite_batch call one pairing helper.
  • Keep one copy of each equivalence test, parameterized over both formats.
Size

Three files (lock_fragments.rs, pdm_lock.rs, poetry_lock.rs), plus call-site renames in redirect/pdm.rs, redirect/poetry.rs, vendor/pypi_pdm.rs and vendor/pypi_poetry.rs. About −250 net lines.

Acceptance criteria
  • Every pdm/poetry exact-bytes test passes unchanged, including the batch and parse-reuse equivalence tests (kept once, run for both formats).
  • The duplicated shape-change test is kept once, in lock_fragments.
  • No user-visible change.
Vorherrschende Sprache
Rust
Sterne
8
Forks
2
Ø Merge
18 Std. 47 Min.
Gemergte PRs (30 T.)
637

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus SocketDev/socket-patch

Alle Issues in SocketDev/socket-patch

Ähnliche Issues

Weitere Issues zu Rust

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.