coreutils 0.5.0

coreutils ~ GNU coreutils (updated); implemented as universal (cross-platform) utils, written in Rust
# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Project Overview

uutils coreutils is a cross-platform reimplementation of the GNU coreutils in Rust. It provides Unix command-line utilities like `ls`, `cat`, `mv`, `cp`, etc. The project aims to be a drop-in replacement for GNU coreutils while being cross-platform, reliable, performant, and well-tested.

**Important:** This project cannot contain any code from GNU or other GPL implementations. Never reference GNU source code directly.

## Build and Development Commands

### Building
```bash
# Build all utilities (multicall binary)
cargo build --release

# Build specific utilities as individual binaries  
cargo build -p uu_cat -p uu_ls -p uu_mv

# Build with platform-specific features
cargo build --release --features unix    # Unix platforms
cargo build --release --features macos   # macOS specific
cargo build --release --features windows # Windows specific

# Using make (requires GNU Make)
make                    # Debug build
make PROFILE=release   # Release build
make UTILS='cat ls mv' # Build specific utilities
```

### Testing
```bash
# Run tests for all utilities
cargo test
cargo test --features unix  # Include platform-specific tests

# Test specific utilities
cargo test --features "chmod mv tail" --no-default-features

# Run with nextest (faster parallel execution)
cargo nextest run --features unix --no-fail-fast

# Using make
make test
make UTILS='cat ls' test
make SKIP_UTILS='dd df' test

# Run GNU test suite comparison
bash util/build-gnu.sh
bash util/run-gnu-test.sh
bash util/run-gnu-test.sh tests/touch/not-owner.sh  # Single test
```

### Code Quality
```bash
# Format code
cargo fmt --all

# Lint with clippy
cargo clippy --all-targets --all-features

# Check with cargo-deny (licenses, security, etc.)
cargo deny --all-features check all

# Spell checking with cspell
# Add spell-checker:ignore comments for words to ignore

# Run pre-commit hooks
pre-commit install  # Setup
# Commits will automatically run checks
```

### Testing Specific Scenarios
```bash
# Test with busybox test suite
make busytest
make UTILS='cat ls' busytest

# Test with specific GNU coreutils version
bash util/build-gnu.sh --release-build
bash util/run-gnu-test.sh tests/misc/sm3sum.pl  # Perl test
DEBUG=1 bash util/run-gnu-test.sh tests/misc/sm3sum.pl  # Debug mode
```

## Architecture and Code Organization

### Project Structure
- **`src/uu/`** - Each utility implemented as separate crate (e.g., `src/uu/cat/`, `src/uu/ls/`)
- **`src/uucore/`** - Shared library code between utilities (parsing, file ops, etc.)
- **`src/bin/coreutils.rs`** - Multicall binary that can invoke any utility
- **`tests/by-util/`** - Integration tests for each utility
- **`tests/uutests/`** - Test framework and utilities

### Utility Structure
Each utility follows this pattern:
```
src/uu/<utility>/
├── Cargo.toml           # Dependencies and metadata
├── LICENSE             # MIT license
├── locales/            # Internationalization files (.ftl)
│   ├── en-US.ftl
│   └── fr-FR.ftl
└── src/
    ├── main.rs         # Entry point (usually just macro call)
    └── <utility>.rs    # Main implementation
```

### Key Architectural Patterns

1. **Multicall Binary**: The main `coreutils` binary can function as any utility based on how it's invoked (like busybox)

2. **Platform Abstraction**: Many utilities have `platform/` subdirectories with OS-specific implementations:
   ```
   src/platform/
   ├── mod.rs
   ├── unix.rs
   ├── windows.rs
   └── macos.rs
   ```

3. **Shared Core**: `uucore` provides common functionality:
   - Argument parsing utilities
   - File system operations
   - Cross-platform compatibility layers
   - Error handling patterns
   - Formatting and display utilities

4. **Feature Flags**: Extensive use of Cargo features for:
   - Platform-specific utilities (`feat_os_unix`, `feat_os_windows`)
   - Optional functionality (`feat_acl`, `feat_selinux`)
   - Utility groupings (`feat_common_core`, `feat_Tier1`)

### Internationalization (i18n)
- Uses Fluent localization system
- Locale files in `locales/` directories as `.ftl` files
- Build process copies locales to target directory
- Supports multiple languages (en-US, fr-FR, etc.)

## Development Guidelines

### Code Style (from CONTRIBUTING.md)
- **Never `panic!`** - Use proper error handling instead of `.unwrap()` or `panic!`
- **Never `exit`** - Use `Result` types for error handling; don't call `std::process::exit`
- **Minimal `unsafe`** - Only for FFI calls, with `// SAFETY:` comments
- **Use `OsStr`/`Path`** - For file paths, not `String`/`str` (supports invalid UTF-8)
- **Avoid macros** - Use simpler alternatives when possible

### Error Handling Patterns
- Return `Result` types rather than exiting
- Use `uucore::error` utilities for consistent error messages
- Handle invalid UTF-8 in paths and arguments gracefully

### Testing Strategy
- Integration tests in `tests/by-util/test_<utility>.rs`
- Unit tests within utility source files
- GNU compatibility tests via `util/run-gnu-test.sh`
- Cross-platform testing in CI

### Performance Considerations
- Many utilities have `BENCHMARKING.md` files with performance notes
- Use efficient algorithms for large file operations
- Platform-specific optimizations where appropriate (e.g., splice on Linux)

## Common Development Tasks

### Adding a New Utility
1. Create directory structure in `src/uu/<name>/`
2. Add to workspace in main `Cargo.toml`
3. Implement following existing utility patterns
4. Add to appropriate feature sets in `Cargo.toml`
5. Create tests in `tests/by-util/test_<name>.rs`
6. Add to `GNUmakefile` utility lists

### Debugging Utilities
```bash
# Debug a specific utility
rust-gdb --args target/debug/coreutils ls
(gdb) b ls.rs:79
(gdb) run

# Run single utility with debugging
cargo run --bin <utility> -- <args>
cargo run --features cat -p uu_cat -- file.txt
```

### Platform-Specific Development
- Use `#[cfg(unix)]`, `#[cfg(windows)]` for conditional compilation
- Implement in `platform/` subdirectories when needed
- Test on multiple platforms via CI or local VMs

### Working with GNU Test Suite
- Install `quilt` for patch management
- Follow instructions from `util/build-gnu.sh` for first-time setup
- Use `util/remaining-gnu-error.py` to see failing tests
- GNU tests require individual utility binaries (not multicall)

Remember: This project maintains strict compatibility with GNU coreutils behavior while improving cross-platform support and code safety through Rust.