Keep civil-date math in one utils::time module: days_from_civil is written twice and vex::time claims to be the only copy

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

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

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

Rechercherichtung

Read crates/socket-patch-core/src/api/date.rs, formats/cargo/floor.rs, and vex/time.rs, then check how api::date is imported by tests/e2e_hosted_production.rs. Move the listed time functions and tests into src/utils/time.rs, update callers and remove the duplicate implementation and outdated claim. Run the named date and dated-channel tests; done means behavior is unchanged and only one days_from_civil definition remains.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

agent:triaged arch-audit priority:p3 refactor

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

Kind: refactor. Register ID: A26.

Problem

Calendar arithmetic (Howard Hinnant's civil-date algorithms) lives in three modules at 5ca5623:

  • api/date.rs L48-L56: days_from_civil(year: i64, month: u32, day: u32), the parser half (parse_timestamp_secs, used by api::ranking and api::retry).
  • formats/cargo/floor.rs L25-L33: a second days_from_civil(year: i64, month: i64, day: i64), spelled with div_euclid instead of the if y >= 0 { y } else { y - 399 } / 400 form. It is used to date nightly-YYYY-MM-DD toolchains.
  • vex/time.rs L30-L36: the inverse civil_from_days, inside unix_to_ymdhms. Its doc claims "this is the single civil-date implementation in the crate". telemetry also formats timestamps through it.

Today the two days_from_civil copies compute the same values; api/date.rs's round-trip test pins only its own copy. A time module under vex/ that telemetry and api import, plus a date parser under api/, puts a general utility in two feature modules.

Proposed change
  • Add crates/socket-patch-core/src/utils/time.rs holding days_from_civil, unix_to_ymdhms, now_rfc3339 and parse_timestamp_secs, with the tests of api/date.rs and vex/time.rs.
  • Delete formats/cargo/floor.rs's copy and call utils::time::days_from_civil (convert its i64 month and day at the call).
  • Delete api/date.rs and vex/time.rs, or reduce them to pub use lines if the CLI or tests import them by path (tests/e2e_hosted_production.rs imports api::date::parse_timestamp_secs).
  • Drop the "single civil-date implementation" claim.
Size

4–5 files. The diff is mostly moves; about −25 net lines.

Acceptance criteria
  • Behavior is unchanged. days_from_civil_inverts_unix_to_ymdhms, parsed_order_is_chronological_in_both_formats, unix_to_ymdhms_matches_brute_force and floor.rs's dated-channel tests pass unchanged.
  • One days_from_civil remains in the crate (grep -rn "fn days_from_civil" crates returns one hit).
  • While moving the tests, drop the fake assert assert!(secs > prev_2822 || secs == 0) in parsed_order_is_chronological_in_both_formats (date.rs L523). It checks the test's own loop counter, not the parser.
Vorherrschende Sprache
Rust
Sterne
9
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.