Skip to content

refactor: deduplicate visual/source helpers, simplify fmtThousands#182

Merged
vmvarela merged 1 commit into
masterfrom
refactor/extract-visual-source-fmtthousands
Jun 27, 2026
Merged

refactor: deduplicate visual/source helpers, simplify fmtThousands#182
vmvarela merged 1 commit into
masterfrom
refactor/extract-visual-source-fmtthousands

Conversation

@vmvarela

Copy link
Copy Markdown
Owner

Three behavior-preserving cleanups reducing net code by -238 lines.

Changes

  1. Extract visual.zig — Shared UTF-8 display-width module (visualWidth, writeCharRepeated, writeSpaces) used by table.zig and markdown.zig. Removed ~170 lines of verbatim duplication. 3 public functions, 4 private helpers.

  2. Extract source.zig — Shared openInput() returning SourceFile{file, needs_close} with deinit() method. Replaces 9 duplicate file-or-stdin switch-with-error-handling blocks across columns.zig, sample.zig, and validate.zig.

  3. Simplify fmtThousands — Reduced 17-line implementation to 8 lines using (digits.len - i) % 3 == 0 instead of two-condition first_group calculation. Oracle-reviewed for mathematical equivalence.

Validation

  • zig build unit-test — ✅ (CSV unit tests with leak detection)
  • zig build test — ✅ (120 integration tests + XML unit tests)
  • Each phase reviewed by @oracle subagent

Files Changed

File Status Δ
src/visual.zig new +102
src/modes/source.zig new +25
src/table.zig modified -93
src/markdown.zig modified -80
src/modes/columns.zig modified -27
src/modes/validate.zig modified -27
src/modes/sample.zig modified -9
src/loader.zig modified -6
Net -238 lines

Closes: — (internal cleanup, no issue)

Three behavior-preserving cleanups:

1. Extract visual.zig — Shared UTF-8 display-width module (visualWidth,
   writeCharRepeated, writeSpaces) used by table.zig and markdown.zig.
   Removed ~170 lines of verbatim duplication. 3 public fns, 4 private helpers.

2. Extract source.zig — Shared openInput() returning SourceFile{file, needs_close}
   with deinit() method. Replaces 9 duplicate file-or-stdin switch blocks
   across columns.zig, sample.zig, and validate.zig.

3. Simplify fmtThousands — Reduced 17-line implementation to 8 lines
   using (digits.len - i) % 3 == 0 instead of first_group calculation.

All tests pass (zig build unit-test + zig build test, exit 0).
Net: +63 lines, -301 lines (-238 net).
@github-actions github-actions Bot added the type:chore Maintenance, refactoring, tooling label Jun 27, 2026
@vmvarela vmvarela merged commit 4ae4fb6 into master Jun 27, 2026
5 checks passed
@vmvarela vmvarela deleted the refactor/extract-visual-source-fmtthousands branch June 27, 2026 16:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type:chore Maintenance, refactoring, tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant