Move Bundler settings parsing out of ruby_crawler into formats/gem/settings.rs, and read .bundle/config keys with one parser (two drifted today)

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

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

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
22/100
issue の種類
リファクタリング
明瞭さ
おおむね明確
活発さ
活発
技術スタック
ruby, rust
領域
devtools

調査の方向性

Start with crates/socket-patch-core/src/crawlers/ruby_crawler.rs around bundle_config_setting_with and formats/gem/mirror.rs (config_key and the key loop), then compare how each reads .bundle/config lines. Step 1 is the parser move into formats/gem/settings.rs, which needs design choices about which key rules win. Done when formats/gem/* no longer imports crawlers::*, one key parser remains, and the ruby crawler, gem vendor, redirect and mirror tests pass.

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

説明

arch-audit refactor

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

Kind: refactor (placement plus a duplicated parser; extends E20/#833). Register ID: A57.

Problem

  • Bundler settings logic lives in the crawler. About 1,260 lines of it sit in crawlers/ruby_crawler.rs L1270-L2530:`` config scalar parsing and unquoting, the global and app config locations, the cache dir, the loaded manifest and lockfile, and the moved root.
  • Format modules import from that crawler. formats/gem/manifest.rs L58 and formats/gem/mirror.rs L16 import from crawlers::ruby_crawler, and so do vendor/gem.rs, vendor/lock_inventory/gem.rs, vex/discover/gem.rs, hosted/engine.rs, patch/redirect/upstream/gem.rs and the CLI.
  • The .bundle/config key line is parsed twice, and the copies drifted:
    • ruby_crawler::bundle_config_setting_with L2449-L2461 matches KEY: as a plain prefix: it accepts KEY:value with no space, does not decode quoted keys, and does not normalize legacy keys.
    • formats/gem/mirror.rs L125-L230 (config_key and the key loop) requires ": ", decodes Bundler 4.1's quoted keys, and normalizes dot/dash keys.
    • The drift is latent for BUNDLE_PATH/BUNDLE_GEMFILE/BUNDLE_LOCKFILE, because Bundler quotes only keys that contain :.
  • The Gemfile/gems.rb manifest name list is written twice: ruby_crawler.rs L276 and hosted/engine.rs L1167. formats/gem/mod.rs already holds BUNDLER_LOCKS.

Proposed change

This is a tracking issue; do the steps in order.

  1. Create formats/gem/settings.rs and move the pure parsers there: the config-map parse (one key-line reader, following mirror.rs's rules), unquote, bundler_truthy, and the tier rules from #1931. Also move a BUNDLER_MANIFEST_FILES const there.
  2. Leave only file and env I/O in the crawler, as a BundlerEnv::ambient() snapshot that replaces the 4 copies of the ambient-env tuple (L47, L169, L591, L670).
  3. Repoint the formats/gem, vendor, vex, hosted and redirect imports.

Size

About 10 files; mostly moves (~1,000 lines moved, ~−80 net).

Acceptance criteria

  • Behavior is unchanged: the ruby crawler, gem vendor, gem redirect and mirror tests pass.
  • formats/gem/* no longer imports crawlers::*.
  • One .bundle/config key parser remains.
主要言語
Rust
スター
8
フォーク
2
平均マージ
19時間 24分
マージ済み PR(30日)
669

環境構築

はじめの一歩

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

SocketDev/socket-patch のほかの issue

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

似ている issue

Rust の issue をもっと見る

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

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