blob: 1029360bf567ccafa60d63beccd072248114e9eb [file] [edit]
// Copyright (c) 2026, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
/// Runs the Dart formatter on every directory in the SDK that should be
/// formatted. Skips directories that are brought in by DEPS.
///
/// Invokes `dart format` using the same executable used to run this script.
library;
import 'dart:io';
import 'package:path/path.dart' as p;
const skippedTopLevelDirectories = [
'build',
'out',
'third_party',
'tests',
'xcodebuild'
];
const skippedTestDirectories = ['co19'];
final repoRoot = p.normalize(p.join(Platform.script.toFilePath(), '../..'));
void main() async {
final entries = [
for (final entry in Directory(repoRoot).listSync(recursive: false))
if (!skippedTopLevelDirectories.contains(p.basename(entry.path))) entry,
for (final entry
in Directory(p.join(repoRoot, 'tests')).listSync(recursive: false))
if (!skippedTestDirectories.contains(p.basename(entry.path))) entry,
];
for (final entry in entries) {
if (entry is! Directory) continue;
final relative = p.relative(entry.path, from: repoRoot);
if (p.basename(relative).startsWith('.')) continue;
print('');
print('=== Formatting $relative/ ===');
final process = await Process.start(
Platform.resolvedExecutable, ['format', relative],
workingDirectory: repoRoot, mode: ProcessStartMode.inheritStdio);
await process.exitCode;
}
}