Skip to content

Commit 36f0f25

Browse files
Implement analyzer that suggests using builder.Services to ConfigureServices method (#42356)
* Implement analyzer to prefer builder.Services over ConfigureServices method * Update src/Framework/AspNetCoreAnalyzers/src/Analyzers/DiagnosticDescriptors.cs Co-authored-by: Safia Abdalla <[email protected]> * Update src/Framework/AspNetCoreAnalyzers/src/Analyzers/DiagnosticDescriptors.cs Co-authored-by: Safia Abdalla <[email protected]> * Rephrase the warnings in the diagnostic descriptor and the tests * Update the title and warning in the diagnostic descriptor * Resolved merge conflict in WebApplicationBuilderAnalyzer.cs * Resolve merge conflicts * Add configureServicesTypes to WebApplicationBuilderAnalyzer.cs Co-authored-by: Safia Abdalla <[email protected]>
1 parent d6047b4 commit 36f0f25

File tree

3 files changed

+459
-0
lines changed

3 files changed

+459
-0
lines changed

src/Framework/AspNetCoreAnalyzers/src/Analyzers/DiagnosticDescriptors.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,15 @@ internal static class DiagnosticDescriptors
8989
isEnabledByDefault: true,
9090
helpLinkUri: "https://aka.ms/aspnet/analyzers");
9191

92+
internal static readonly DiagnosticDescriptor DoNotUseHostConfigureServices = new(
93+
"ASP0012",
94+
"Suggest using builder.Services over Host.ConfigureServices or WebHost.ConfigureServices",
95+
"Suggest using builder.Services instead of {0}",
96+
"Usage",
97+
DiagnosticSeverity.Warning,
98+
isEnabledByDefault: true,
99+
helpLinkUri: "https://aka.ms/aspnet/analyzers");
100+
92101
internal static readonly DiagnosticDescriptor DisallowConfigureAppConfigureHostBuilder = new(
93102
"ASP0013",
94103
"Suggest using WebApplicationBuilder.Configuration over Configure methods",

src/Framework/AspNetCoreAnalyzers/src/Analyzers/WebApplicationBuilder/WebApplicationBuilderAnalyzer.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public class WebApplicationBuilderAnalyzer : DiagnosticAnalyzer
2222
DiagnosticDescriptors.DoNotUseConfigureWithConfigureWebHostBuilder,
2323
DiagnosticDescriptors.DoNotUseUseStartupWithConfigureWebHostBuilder,
2424
DiagnosticDescriptors.DoNotUseHostConfigureLogging,
25+
DiagnosticDescriptors.DoNotUseHostConfigureServices,
2526
DiagnosticDescriptors.DisallowConfigureAppConfigureHostBuilder
2627
});
2728

@@ -51,6 +52,11 @@ public override void Initialize(AnalysisContext context)
5152
wellKnownTypes.HostingHostBuilderExtensions,
5253
wellKnownTypes.WebHostBuilderExtensions
5354
};
55+
INamedTypeSymbol[] configureServicesTypes =
56+
{
57+
wellKnownTypes.HostingHostBuilderExtensions,
58+
wellKnownTypes.ConfigureWebHostBuilder
59+
};
5460
INamedTypeSymbol[] configureAppTypes =
5561
{
5662
wellKnownTypes.ConfigureHostBuilder,
@@ -145,6 +151,38 @@ public override void Initialize(AnalysisContext context)
145151
invocation));
146152
}
147153

154+
// var builder = WebApplication.CreateBuilder(args);
155+
// builder.Host.ConfigureServices(x => {});
156+
if (IsDisallowedMethod(
157+
operationAnalysisContext,
158+
invocation,
159+
targetMethod,
160+
wellKnownTypes.ConfigureHostBuilder,
161+
"ConfigureServices",
162+
configureServicesTypes))
163+
{
164+
operationAnalysisContext.ReportDiagnostic(
165+
CreateDiagnostic(
166+
DiagnosticDescriptors.DoNotUseHostConfigureServices,
167+
invocation));
168+
}
169+
170+
// var builder = WebApplication.CreateBuilder(args);
171+
// builder.WebHost.ConfigureServices(x => {});
172+
if (IsDisallowedMethod(
173+
operationAnalysisContext,
174+
invocation,
175+
targetMethod,
176+
wellKnownTypes.ConfigureWebHostBuilder,
177+
"ConfigureServices",
178+
configureServicesTypes))
179+
{
180+
operationAnalysisContext.ReportDiagnostic(
181+
CreateDiagnostic(
182+
DiagnosticDescriptors.DoNotUseHostConfigureServices,
183+
invocation));
184+
}
185+
148186
// var builder = WebApplication.CreateBuilder();
149187
// builder.WebHost.ConfigureAppConfiguration(builder => {});
150188
if (IsDisallowedMethod(

0 commit comments

Comments
 (0)