using Microsoft.Build.Construction; namespace DotNetSolutionTools.Core; public static class ImplicitUsings { public static List FindCSharpProjectsMissingImplicitUsings(string solutionFilePath) { var solutionFile = SolutionFile.Parse(solutionFilePath); var csprojList = SolutionProjectParity.GetCSharpProjectObjectsFromSolutionFile( solutionFile ); var projectsMissingImplicitUsings = FindCSharpProjectsMissingImplicitUsings(csprojList); var projectsMissingImplicitUsingsStringList = projectsMissingImplicitUsings .Select(x => x.FullPath) .ToList(); return projectsMissingImplicitUsingsStringList; } public static List FindCSharpProjectsMissingImplicitUsings( List projectList ) { var projectsMissingImplicitUsings = new List(); foreach (var project in projectList) { var implicitUsings = project.PropertyGroups .SelectMany(x => x.Properties) .FirstOrDefault(x => x.Name == "ImplicitUsings"); if (implicitUsings is null || implicitUsings.Value is not "enable") { projectsMissingImplicitUsings.Add(project); } } return projectsMissingImplicitUsings; } public static void AddMissingImplicitUsings( List projectsMissingImplicitUsings ) { foreach (var project in projectsMissingImplicitUsings) { if (ProjectIsMissingImplicitUsings(project)) { project.AddProperty("ImplicitUsings", "enable"); project.Save(); FormatCsproj.FormatCsprojFile(project.FullPath); } } } public static void EnableDisabledImplicitUsings( List projectsMissingImplicitUsings ) { throw new NotImplementedException(); } public static void EnableAllImplicitUsings( List projectsMissingImplicitUsings ) { throw new NotImplementedException(); } public static bool ProjectIsMissingImplicitUsings(ProjectRootElement project) { var implicitUsings = project.PropertyGroups .SelectMany(x => x.Properties) .FirstOrDefault(x => x.Name == "ImplicitUsings"); if (implicitUsings is null) { return true; } return false; } }