Skip to content

Commit 7d6a742

Browse files
author
Per Kops
committed
feat: handle project specific frameworks for .editorconfig files
1 parent 0f5918a commit 7d6a742

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

src/Atc.CodingRules.Updater.CLI/ProjectHelper.cs

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using OfficeOpenXml;
33
using OfficeOpenXml.Style;
44

5+
// ReSharper disable SwitchStatementMissingSomeEnumCasesNoDefault
56
// ReSharper disable InvertIf
67
// ReSharper disable SuggestBaseTypeForParameter
78
namespace Atc.CodingRules.Updater.CLI;
@@ -89,6 +90,8 @@ private static void HandleEditorConfigFiles(
8990
logger.LogInformation($"{AppEmojisConstants.AreaEditorConfig} Working on EditorConfig files");
9091

9192
var rawCodingRulesDistributionProjectTargetBaseUrl = $"{RawCodingRulesDistributionBaseUrl}/{options.ProjectTarget.ToStringLowerCase()}";
93+
const string projectFrameworkCodingRulesBaseUrl = $"{RawCodingRulesDistributionBaseUrl}/project-frameworks";
94+
9295
EditorConfigHelper.HandleFile(logger, "root", rawCodingRulesDistributionProjectTargetBaseUrl, projectPath, string.Empty);
9396

9497
foreach (var item in options.Mappings.Sample.Paths)
@@ -108,6 +111,66 @@ private static void HandleEditorConfigFiles(
108111
var path = new DirectoryInfo(item);
109112
EditorConfigHelper.HandleFile(logger, "test", rawCodingRulesDistributionProjectTargetBaseUrl, path, "test");
110113
}
114+
115+
// Handle Project specific Frameworks
116+
var projectsInProjectPath = DotnetCsProjFileHelper.FindAllInPathAndPredictProjectTypes(projectPath);
117+
118+
foreach (var (csProjFile, projectType) in projectsInProjectPath)
119+
{
120+
var projectFrameworkType = DetermineProjectFrameworkType(options, csProjFile, projectType);
121+
if (projectFrameworkType == ProjectFrameworkType.None)
122+
{
123+
continue;
124+
}
125+
126+
EditorConfigHelper.HandleFile(logger, "ProjectFramework", projectFrameworkCodingRulesBaseUrl, csProjFile.Directory!, projectFrameworkType.ToStringLowerCase());
127+
}
128+
}
129+
130+
private static ProjectFrameworkType DetermineProjectFrameworkType(
131+
OptionsFile options,
132+
FileInfo csProjFile,
133+
DotnetProjectType projectType)
134+
{
135+
var projectFrameworkType = ProjectFrameworkType.None;
136+
137+
var optionsProjectFrameworkMapping = options.ProjectFrameworkMappings.FirstOrDefault(
138+
x => x.Name.Equals(
139+
Path.GetFileNameWithoutExtension(csProjFile.Name),
140+
StringComparison.OrdinalIgnoreCase));
141+
142+
if (optionsProjectFrameworkMapping is not null)
143+
{
144+
projectFrameworkType = optionsProjectFrameworkMapping.Type;
145+
}
146+
else
147+
{
148+
switch (projectType)
149+
{
150+
case DotnetProjectType.AzureFunctionApp:
151+
projectFrameworkType = ProjectFrameworkType.AzureFunctions;
152+
break;
153+
case DotnetProjectType.BlazorServerApp:
154+
case DotnetProjectType.BlazorWAsmApp:
155+
projectFrameworkType = ProjectFrameworkType.Blazor;
156+
break;
157+
case DotnetProjectType.MauiApp:
158+
projectFrameworkType = ProjectFrameworkType.Maui;
159+
break;
160+
case DotnetProjectType.WinFormApp:
161+
projectFrameworkType = ProjectFrameworkType.WinForms;
162+
break;
163+
case DotnetProjectType.WpfApp:
164+
case DotnetProjectType.WpfLibrary:
165+
projectFrameworkType = ProjectFrameworkType.Wpf;
166+
break;
167+
case DotnetProjectType.WebApi:
168+
projectFrameworkType = ProjectFrameworkType.WebApi;
169+
break;
170+
}
171+
}
172+
173+
return projectFrameworkType;
111174
}
112175

113176
private static void HandleDirectoryBuildPropsFiles(

0 commit comments

Comments
 (0)