run method
Runs this command.
The return value is wrapped in a Future if necessary and returned by
CommandRunner.runCommand.
Implementation
@override
Future<void> run() async {
final projectDir = findNitroProjectRoot();
if (projectDir == null) {
stderr.writeln('No Nitro project found in . or its subdirectories.');
exit(1);
}
final headless = _headless;
var deleted = 0;
// Patterns that identify Nitrogen-generated files.
bool isGenerated(String path) {
final base = p.basename(path);
return base.endsWith('.g.dart') ||
base.endsWith('.bridge.g.swift') ||
base.endsWith('.bridge.g.kt') ||
base.endsWith('.bridge.g.h') ||
(base.startsWith('Hybrid') && (base.endsWith('.hpp') || base.endsWith('.cpp')));
}
// Walk the project tree and delete generated files.
// Skip .dart_tool and hidden dirs except when explicitly targeting them.
void walk(Directory dir) {
try {
for (final entity in dir.listSync()) {
final name = p.basename(entity.path);
if (name.startsWith('.') || name == 'build') continue;
if (entity is Directory) {
walk(entity);
} else if (entity is File && isGenerated(entity.path)) {
final rel = p.relative(entity.path, from: projectDir.path);
entity.deleteSync();
if (headless) {
stdout.writeln('[nitro:clean] deleted $rel');
} else {
stdout.writeln(' ${red('−')} $rel');
}
deleted++;
}
}
} catch (_) {}
}
if (!headless) {
stdout.writeln('');
stdout.writeln(boldCyan(' ╔══════════════════════════╗'));
stdout.writeln(boldCyan(' ║ nitrogen clean ║'));
stdout.writeln(boldCyan(' ╚══════════════════════════╝'));
stdout.writeln('');
}
walk(projectDir);
// Also delete build_runner lock + asset graph so the next run starts fresh.
final buildDir = Directory(p.join(projectDir.path, '.dart_tool', 'build'));
for (final name in ['lock', 'asset_graph.json']) {
final f = File(p.join(buildDir.path, name));
if (f.existsSync()) {
f.deleteSync();
final rel = p.relative(f.path, from: projectDir.path);
if (headless) {
stdout.writeln('[nitro:clean] deleted $rel');
} else {
stdout.writeln(' ${red('−')} $rel');
}
}
}
if (headless) {
stdout.writeln('[nitro] $deleted generated file(s) removed');
} else {
stdout.writeln('');
if (deleted == 0) {
stdout.writeln(gray(' Nothing to clean — no generated files found.'));
} else {
stdout.writeln(boldGreen(' ✓ $deleted generated file(s) removed.'));
}
stdout.writeln('');
}
}