writeFileTree static method
void
writeFileTree({})
Implementation
static void writeFileTree({
required final Set<String> filePaths,
required final Set<String> ignoredPaths,
required final void Function(String, {AnsiStyle? style}) write,
}) {
final List<_TreeNode> allFiles = [
...filePaths.map((final path) => _TreeNode(path, false)),
...ignoredPaths.map((final path) => _TreeNode(path, true)),
];
// Sort files by directory structure
// Files comes after directories, and directories are sorted alphabetically
//
// Example of sorted output:
// a/b/z.dart
// a/z/a.dart
// z/a.dart
// a.dart
allFiles.sort((final a, final b) {
final aDirs = p.split(a.part);
final bDirs = p.split(b.part);
final minParts = min(aDirs.length, bDirs.length);
for (var i = 0; i < minParts; i++) {
final isLast = i == minParts - 1;
if (isLast && aDirs.length != bDirs.length) {
// If paths are different lengths, directories (longer paths) come first
return bDirs.length.compareTo(aDirs.length);
}
// If parts are different at this level, sort alphabetically
if (aDirs[i] != bDirs[i]) {
return aDirs[i].compareTo(bDirs[i]);
}
}
return 0;
});
final tree = _buildTree(allFiles);
_writeTree(tree, write, isParentIgnored: filePaths.isEmpty);
}