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

オープン
#1,844 コメント 3 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

@mikolalysenko がすでに取り組んでいます。

2026年11月1日 から。

  • #1898 @mikolalysenko による — オープン

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
35/100
issue の種類
リファクタリング
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
rust
領域
backend

調査の方向性

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.

索引モデルが issue の本文から書いたものです。

説明

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.
主要言語
Rust
スター
9
フォーク
2
平均マージ
18時間 47分
マージ済み PR(30日)
637

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

SocketDev/socket-patch のほかの issue

SocketDev/socket-patch の issue をすべて見る

似ている issue

Rust の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。