This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Projekt-Übersicht
**NameToUnix** ist ein Rust-CLI-Tool zum Bereinigen von Datei- und Verzeichnisnamen gemäß Linux-Konventionen. Es ersetzt Leerzeichen, Sonderzeichen und deutsche Umlaute und arbeitet rekursiv durch Verzeichnisbäume.
Dies ist das erste Rust-Projekt des Autors - Code-Verbesserungen sollten klar und didaktisch begründet werden.
- **`sanitizer.rs`**: Kern-Logik der Dateinamen-Bereinigung
-`clean_filename()`: Hauptfunktion
- Trennt Stamm und Extension
- Schützt spezielle Identifikatoren (`C++`, `C#`) via Platzhalter
- Wendet zuerst Config-Replacements an, dann hardcoded Replacements
- Ersetzt Emojis und hochgestellte Zeichen durch `_`
- Entfernt ungültige Zeichen via Regex (`[^\w.\-]`)
- Normalisiert Punkt/Unterstrich-Kombinationen
- Trimmt führende Unterstriche (behält aber führenden Punkt)
- Stellt Platzhalter wieder her
-`is_excluded()`: Prüft Glob-Patterns
-`is_safe_rename()`: Sicherheitscheck vor Umbenennung (prüft ob Ziel existiert ohne `--force`)
## Konfigurationsdatei-Logik
- TOML-Format mit Sektion `[replacements]`
- **Wichtig**: Hardcoded-Transformationen (z.B. Apostroph-Entfernung, Umlaut-Ersetzung) sind immer vorrangig und nicht deaktivierbar
- Config-Replacements werden **vor** den hardcoded Replacements angewendet
- Lokale Configs überschreiben User-Configs überschreiben System-Configs
## Besonderheiten
1.**Tiefenbasierte Sortierung**: Umbenennung erfolgt von den tiefsten Verzeichnissen/Dateien nach oben, um Konflikte zu vermeiden (Parent-Verzeichnisse dürfen nicht vor ihren Kindern umbenannt werden).
2.**Platzhalter für Spezialfälle**: `C++`, `c++`, `C#`, `c#` werden temporär durch Token (`CPLUSPLUS`, etc.) geschützt, damit `+` und `#` nicht durch Unterstriche ersetzt werden.
3.**Emoji-Erkennung**: Nutzt das `emojis`-Crate zur Emoji-Erkennung und Unicode-Segmentation für grapheme-korrekte Verarbeitung.
4.**Performance-Optimierung**: Regex-Patterns sind als `static Lazy<Regex>` definiert (via `once_cell`) für wiederholte Nutzung ohne Re-Compilation.
5.**Root-Directory-Schutz**: Standardmäßig wird das Root-Verzeichnis (depth 0) nicht umbenannt, außer `--modify-root` ist gesetzt.