Fix Output.enable_ansi_colors usage to check stdout vs stderr (#24212)

## Summary

Updated all 49 usages of `Output.enable_ansi_colors` to properly check
either `Output.enable_ansi_colors_stdout` or
`Output.enable_ansi_colors_stderr` based on their output destination.

This prevents bugs where ANSI colors are checked against the wrong
stream (e.g., checking stdout colors when writing to stderr).

## Changes

### Added
- `Output.enable_ansi_colors` now a `@compileError` to prevent future
misuse with helpful error message directing to correct variants

### Deleted
- `Output.isEmojiEnabled()` - replaced all usages with
`enable_ansi_colors_stderr` (all were error/progress output)
- `Output.prettyWithPrinterFn()` - removed unused dead code

### Updated by Output Destination

**Stderr (error/diagnostic output):**
- logger.zig: Log messages and errors
- crash_handler.zig: Crash reports and stack traces (10 instances)
- PackageInstaller.zig: Error messages from lifecycle scripts (3
instances)
- JSValue.zig: Test expectation error messages
- JSGlobalObject.zig: Exception throwing
- pack_command.zig: Progress indicators
- VirtualMachine.zig: Exception printing (2 instances)
- Test expect files: Test failure messages and diffs (10 instances)
- diff_format.zig: Test diff output
- ProgressStrings.zig: Package manager progress emojis (6 functions)
- security_scanner.zig: Security scan progress emoji
- output.zig: panic(), resetTerminal()

**Stdout (primary output/interactive UI):**
- hot_reloader.zig: Terminal clearing on reload
- Version.zig: Version diff formatting
- install_with_manager.zig: Package installation tree
- update_interactive_command.zig: Interactive update UI (2 instances)
- init_command.zig: Interactive radio buttons
- create_command.zig: Template creation output (2 instances)
- outdated_command.zig: Outdated packages table
- publish_command.zig: Box drawing characters (6 instances)

**Backward Compatible:**
- BunObject.zig: `Bun.enableANSIColors` property returns `(stdout ||
stderr)` to maintain compatibility
- fmt.zig: Removed unused `.default` field from Options struct

## Test Plan

-  All changes compile successfully with `bun run zig:check`
-  Verified all 49 usages have been updated to appropriate variant
-  Verified no remaining references to deprecated functions/variables
-  Compile error triggers if someone tries to use
`Output.enable_ansi_colors`

## Stats

- 24 files changed
- 58 insertions, 77 deletions (net -19 lines)
- 49 usages correctly updated
- 3 items deleted/deprecated

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Bot <claude-bot@bun.sh>
Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
robobun
2025-10-31 19:08:41 -07:00
committed by GitHub
parent fb6384160d
commit c5def80191
24 changed files with 58 additions and 77 deletions

View File

@@ -131,7 +131,7 @@ pub const ProgressBuf = struct {
}
pub fn pretty(comptime fmt: string, args: anytype) !string {
if (Output.enable_ansi_colors) {
if (Output.enable_ansi_colors_stdout) {
return ProgressBuf.print(comptime Output.prettyFmt(fmt, true), args);
} else {
return ProgressBuf.print(comptime Output.prettyFmt(fmt, false), args);
@@ -2212,7 +2212,7 @@ pub const Example = struct {
);
async_http.client.flags.reject_unauthorized = env_loader.getTLSRejectUnauthorized();
if (Output.enable_ansi_colors) {
if (Output.enable_ansi_colors_stdout) {
async_http.client.progress_node = progress_node;
}