public static Dictionary WeightedList = new Dictionary(); void Main() { var r1 = new Regex(@"<#.+?#>", RegexOptions.Singleline); var r2 = new Regex("#.+?[\r|\n]"); var directoryPath = Path.Combine(GetExecutingDirectory(),"Modules"); var di = new DirectoryInfo(directoryPath); var files = di.GetFiles("*.ps1",SearchOption.AllDirectories); var functionNames = new List(); var excludeNames = new List{"Module", "profile", "Shredded Function Names", "ShredModules", "VariableDeclarations", "ConfigurationValues", "chocolateybeforemodify", "chocolateyInstall", "chocolateyUninstall"}; var d = new Dictionary>(); var df = files.Select(x => { var fm = new FolderModule(); fm.FunctionName = Path.GetFileNameWithoutExtension(x.FullName); var pathParent = x.Directory; fm.PublicPrivate = x.Directory.Name; fm.ModuleName = x.Directory.Parent.Name; return fm; }).Where(x => !excludeNames.Contains(x.FunctionName) && x.FunctionName.IndexOf(".Test", StringComparison.OrdinalIgnoreCase) < 0).Distinct().ToDictionary(x => x.FunctionName, x => x); var fmod = new FolderModule(); fmod.FunctionName = "Alkami.Ops.Common"; fmod.PublicPrivate = "OPS"; fmod.ModuleName = "Alkami.Ops.Common"; df.Add(fmod.FunctionName,fmod); fmod = new FolderModule(); fmod.FunctionName = "Alkami.Ops.SecretServer"; fmod.PublicPrivate = "OPS"; fmod.ModuleName = "Alkami.Ops.SecretServer"; df.Add(fmod.FunctionName,fmod); //df.Where(x => !new[]{"Public","Private"}.Contains(x.Value.PublicPrivate)).Dump(); //df.Where(x => new[]{"Public","Private"}.Contains(x.Value.PublicPrivate)).Dump(); // Dictionary>> var fd = new Dictionary>>(); foreach(var file in files) { var fileName = Path.GetFileNameWithoutExtension(file.FullName); if (excludeNames.Contains(fileName) || fileName.IndexOf(".Test", StringComparison.OrdinalIgnoreCase) >= 0) { continue; } var moduleName = file.Directory.Parent.Name; if (!d.ContainsKey(moduleName)) { d.Add(moduleName, new HashSet()); } if (!fd.ContainsKey(moduleName)) { fd.Add(moduleName, new Dictionary>()); } var text = r2.Replace(r1.Replace(File.ReadAllText(file.FullName),""), ""); foreach (var kvp in df) { if (text.Contains(kvp.Key) && kvp.Value.ModuleName != moduleName) { if (!fd[moduleName].ContainsKey(fileName)) { fd[moduleName].Add(fileName, new HashSet()); } if (kvp.Value.PublicPrivate.ToUpper() == "PRIVATE") { fd[moduleName][fileName].Add("!!PRIVATE - " + kvp.Value.ModuleName + " - " + kvp.Value.FunctionName); } else if (kvp.Value.PublicPrivate.ToUpper() == "OPS" && !moduleName.ToUpper().Contains("DEVOPS")) { fd[moduleName][fileName].Add("!!OPS - " + kvp.Value.ModuleName + " - " + kvp.Value.FunctionName); } else { fd[moduleName][fileName].Add(kvp.Value.ModuleName); } d[moduleName].Add(kvp.Value.ModuleName); } } } // d.Dump(); foreach(var kvp in d) { $"{kvp.Key}".Dump(); kvp.Value.ToList().ForEach(x => $" {x}".Dump()); "".Dump(); } "".Dump(); "===============================================".Dump(); "".Dump(); foreach(var kvp in fd) { $"{kvp.Key}".Dump(); foreach(var kkvp in kvp.Value) { $" {kkvp.Key}".Dump(); kkvp.Value.ToList().ForEach(x => $" {x}".Dump()); } "".Dump(); } /* I need to know that a given module has a dependency on another module. I start with the file.Directory.Parent.Name as the module. I then find each file in that folder, and check all lines to match each item in the list. If any line matches any key: add the module dependency from the value.ModuleName for that key to the list under the module continue to the next line */ } public class FolderModule { public string ModuleName {get;set;} public string PublicPrivate {get;set;} public string FunctionName {get;set;} } public static int CalculateWeightedValue(Dictionary inputs, string key) { return 0; } public static string GetExecutingDirectory() { return Path.GetDirectoryName (Util.CurrentQueryPath); }