using System; using System.Collections.Generic; using System.IO; using System.Linq; using Semmle.Util.Logging; namespace Semmle.Extraction.CSharp.DependencyFetching { public static class FileInfoExtensions { private static IEnumerable SelectFilesAux(this IEnumerable files, Predicate p) => files.Where(f => p(f)).Select(fi => fi.FullName); public static IEnumerable SelectRootFiles(this IEnumerable files, DirectoryInfo dir) => files.Where(file => file.DirectoryName == dir.FullName); internal static IEnumerable SelectSmallFiles(this IEnumerable files, ILogger logger) { const int oneMb = 1_048_576; return files.Where(file => { if (file.Length > oneMb) { logger.LogDebug($"Skipping {file.FullName} because it is bigger than 1MB."); return false; } return true; }); } public static IEnumerable SelectFileNamesByExtension(this IEnumerable files, params string[] extensions) => files.SelectFilesAux(fi => extensions.Contains(fi.Extension)); public static IEnumerable SelectFileNamesByName(this IEnumerable files, params string[] names) => files.SelectFilesAux(fi => names.Any(name => string.Compare(name, fi.Name, true) == 0)); public static IEnumerable SelectFileNames(this IEnumerable files) => files.SelectFilesAux(_ => true); } }