Skip to content

Commit 992ef81

Browse files
authored
More efficient way of finding files that may need to be formatted (#1778)
closes #1776
1 parent 8a866a5 commit 992ef81

File tree

1 file changed

+31
-10
lines changed

1 file changed

+31
-10
lines changed

Src/CSharpier.Cli/CommandLineFormatter.cs

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,27 @@ CancellationToken cancellationToken
226226
}
227227
}
228228

229+
async IAsyncEnumerable<string> EnumerateNonignoredFiles(string directory)
230+
{
231+
foreach (var file in fileSystem.Directory.EnumerateFiles(directory))
232+
{
233+
yield return file;
234+
}
235+
236+
foreach (var subdirectory in fileSystem.Directory.EnumerateDirectories(directory))
237+
{
238+
if (await optionsProvider.IsIgnoredAsync(subdirectory, cancellationToken))
239+
{
240+
continue;
241+
}
242+
243+
await foreach (var file in EnumerateNonignoredFiles(subdirectory))
244+
{
245+
yield return file;
246+
}
247+
}
248+
}
249+
229250
async Task FormatFile(
230251
string actualFilePath,
231252
string originalFilePath,
@@ -292,16 +313,16 @@ await FormatPhysicalFile(
292313
return 1;
293314
}
294315

295-
var tasks = fileSystem
296-
.Directory.EnumerateFiles(
297-
directoryOrFilePath,
298-
"*.*",
299-
SearchOption.AllDirectories
300-
)
301-
.Select(o =>
302-
FormatFile(o, o.Replace(directoryOrFilePath, originalDirectoryOrFile))
303-
)
304-
.ToArray();
316+
var tasks = new List<Task>();
317+
await foreach (
318+
var file in EnumerateNonignoredFiles(directoryOrFilePath)
319+
.WithCancellation(cancellationToken)
320+
)
321+
{
322+
var relativePath = file.Replace(directoryOrFilePath, originalDirectoryOrFile);
323+
tasks.Add(FormatFile(file, relativePath));
324+
}
325+
305326
try
306327
{
307328
await Task.WhenAll(tasks).WaitAsync(cancellationToken);

0 commit comments

Comments
 (0)