Skip to content

Commit 02b8adf

Browse files
committed
C#: Address review comments and some light re-factoring.
1 parent 61a5235 commit 02b8adf

File tree

2 files changed

+53
-38
lines changed

2 files changed

+53
-38
lines changed

csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/DependencyManager.cs

Lines changed: 14 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,14 @@ public DependencyManager(string srcDir, IDependencyOptions options, ILogger logg
5959
this.progressMonitor.FindingFiles(srcDir);
6060

6161
packageDirectory = new TemporaryDirectory(ComputeTempDirectory(sourceDir.FullName));
62-
var allFiles = GetFiles("*.*").ToList();
63-
var smallFiles = GetSmallFiles(allFiles);
64-
this.fileContent = new FileContent(progressMonitor, GetFileNames(smallFiles));
65-
this.allSources = GetFileNames(allFiles, ".cs").ToList();
66-
var allProjects = GetFileNames(allFiles, ".csproj");
62+
var allFiles = GetAllFiles().ToList();
63+
var smallFiles = allFiles.SelectSmallFiles(progressMonitor).SelectFileNames();
64+
this.fileContent = new FileContent(progressMonitor, smallFiles);
65+
this.allSources = allFiles.SelectFileNamesByExtension(".cs").ToList();
66+
var allProjects = allFiles.SelectFileNamesByExtension(".csproj");
6767
var solutions = options.SolutionFile is not null
6868
? new[] { options.SolutionFile }
69-
: GetFileNames(allFiles, ".sln");
69+
: allFiles.SelectFileNamesByExtension(".sln");
7070

7171
var dllDirNames = options.DllDirs.Select(Path.GetFullPath).ToList();
7272

@@ -156,7 +156,7 @@ private void GenerateSourceFilesFromWebViews(List<FileInfo> allFiles)
156156
{
157157
progressMonitor.LogInfo($"Generating source files from cshtml and razor files.");
158158

159-
var views = GetFileNames(allFiles, ".cshtml", ".razor").ToArray();
159+
var views = allFiles.SelectFileNamesByExtension(".cshtml", ".razor").ToArray();
160160

161161
if (views.Length > 0)
162162
{
@@ -184,31 +184,10 @@ private void GenerateSourceFilesFromWebViews(List<FileInfo> allFiles)
184184

185185
public DependencyManager(string srcDir) : this(srcDir, DependencyOptions.Default, new ConsoleLogger(Verbosity.Info)) { }
186186

187-
private IEnumerable<FileInfo> GetFiles(string pattern, bool recurseSubdirectories = true) =>
188-
sourceDir.GetFiles(pattern, new EnumerationOptions
189-
{
190-
RecurseSubdirectories = recurseSubdirectories,
191-
MatchCasing = MatchCasing.CaseInsensitive
192-
})
187+
private IEnumerable<FileInfo> GetAllFiles() =>
188+
sourceDir.GetFiles("*.*", new EnumerationOptions { RecurseSubdirectories = true })
193189
.Where(d => d.Extension != ".dll" && !options.ExcludesFile(d.FullName));
194190

195-
private static IEnumerable<string> GetFileNames(IEnumerable<FileInfo> files, params string[] extensions) =>
196-
files.Where(fi => !extensions.Any() || extensions.Contains(fi.Extension)).Select(fi => fi.FullName);
197-
198-
private IEnumerable<FileInfo> GetSmallFiles(IEnumerable<FileInfo> files)
199-
{
200-
const int oneMb = 1_048_576;
201-
return files.Where(file =>
202-
{
203-
if (file.Length > oneMb)
204-
{
205-
progressMonitor.LogDebug($"Skipping {file.FullName} because it is bigger than 1MB.");
206-
return false;
207-
}
208-
return true;
209-
});
210-
}
211-
212191
/// <summary>
213192
/// Computes a unique temp directory for the packages associated
214193
/// with this source tree. Use a SHA1 of the directory name.
@@ -390,16 +369,14 @@ private void Restore(IEnumerable<string> targets, string? pathToNugetConfig = nu
390369

391370
private void DownloadMissingPackages(List<FileInfo> allFiles)
392371
{
393-
var nugetConfigs = allFiles
394-
.Where(fi => fi.Name == "nuget.config")
395-
.Select(fi => fi.FullName)
396-
.ToArray();
372+
var nugetConfigs = allFiles.SelectFileNamesByName("nuget.config").ToArray();
397373
string? nugetConfig = null;
398374
if (nugetConfigs.Length > 1)
399375
{
400376
progressMonitor.MultipleNugetConfig(nugetConfigs);
401-
nugetConfig = GetFiles("nuget.config", recurseSubdirectories: false)
402-
.Select(fi => fi.FullName)
377+
nugetConfig = allFiles
378+
.SelectRootFiles(sourceDir)
379+
.SelectFileNamesByName("nuget.config")
403380
.FirstOrDefault();
404381
if (nugetConfig == null)
405382
{
@@ -412,8 +389,7 @@ private void DownloadMissingPackages(List<FileInfo> allFiles)
412389
}
413390

414391
var alreadyDownloadedPackages = Directory.GetDirectories(packageDirectory.DirInfo.FullName)
415-
.Select(d => Path.GetFileName(d)
416-
.ToLowerInvariant());
392+
.Select(d => Path.GetFileName(d).ToLowerInvariant());
417393
var notYetDownloadedPackages = fileContent.AllPackages.Except(alreadyDownloadedPackages);
418394
foreach (var package in notYetDownloadedPackages)
419395
{
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.IO;
4+
using System.Linq;
5+
6+
namespace Semmle.Extraction.CSharp.DependencyFetching
7+
{
8+
public static class FileInfoExtensions
9+
{
10+
private static IEnumerable<string> SelectFilesAux(this IEnumerable<FileInfo> files, Predicate<FileInfo> p) =>
11+
files.Where(f => p(f)).Select(fi => fi.FullName);
12+
13+
public static IEnumerable<FileInfo> SelectRootFiles(this IEnumerable<FileInfo> files, DirectoryInfo dir) =>
14+
files.Where(file => file.DirectoryName == dir.FullName);
15+
16+
internal static IEnumerable<FileInfo> SelectSmallFiles(this IEnumerable<FileInfo> files, ProgressMonitor progressMonitor)
17+
{
18+
const int oneMb = 1_048_576;
19+
return files.Where(file =>
20+
{
21+
if (file.Length > oneMb)
22+
{
23+
progressMonitor.LogDebug($"Skipping {file.FullName} because it is bigger than 1MB.");
24+
return false;
25+
}
26+
return true;
27+
});
28+
}
29+
30+
public static IEnumerable<string> SelectFileNamesByExtension(this IEnumerable<FileInfo> files, params string[] extensions) =>
31+
files.SelectFilesAux(fi => extensions.Contains(fi.Extension));
32+
33+
public static IEnumerable<string> SelectFileNamesByName(this IEnumerable<FileInfo> files, params string[] names) =>
34+
files.SelectFilesAux(fi => names.Any(name => string.Compare(name, fi.Name, true) == 0));
35+
36+
public static IEnumerable<string> SelectFileNames(this IEnumerable<FileInfo> files) =>
37+
files.SelectFilesAux(_ => true);
38+
}
39+
}

0 commit comments

Comments
 (0)