Skip to content

Commit 010ffe6

Browse files
committed
Consolidate general-purpose analyzers
We have some non-MVC analyzers hanging out in the Mvc.Analyzers package. Part of: #12288
1 parent b841326 commit 010ffe6

35 files changed

+61
-144
lines changed

src/Analyzers/Analyzers/src/Microsoft.AspNetCore.Analyzers.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
<IncludeBuildOutput>false</IncludeBuildOutput>
1616
<GenerateDocumentationFile>false</GenerateDocumentationFile>
1717
<NuspecFile>$(MSBuildProjectName).nuspec</NuspecFile>
18+
<Nullable>Enable</Nullable>
1819
</PropertyGroup>
1920

2021
<ItemGroup>

src/Mvc/Mvc.Analyzers/src/Startup/OptionsFacts.cs renamed to src/Analyzers/Analyzers/src/OptionsFacts.cs

+2-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

44
using System;
5-
using Microsoft.AspNetCore.Mvc.Analyzers;
65
using Microsoft.CodeAnalysis;
76

87
namespace Microsoft.AspNetCore.Analyzers
@@ -14,8 +13,8 @@ public static bool IsEndpointRoutingExplicitlyDisabled(OptionsAnalysis analysis)
1413
for (var i = 0; i < analysis.Options.Length; i++)
1514
{
1615
var item = analysis.Options[i];
17-
if (string.Equals(item.OptionsType.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat), SymbolNames.MvcOptions) &&
18-
string.Equals(item.Property.Name, SymbolNames.EnableEndpointRoutingProperty, StringComparison.Ordinal))
16+
if (string.Equals(item.OptionsType.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat), SymbolNames.MvcOptions.MetadataName) &&
17+
string.Equals(item.Property.Name, SymbolNames.MvcOptions.EnableEndpointRoutingPropertyName, StringComparison.Ordinal))
1918
{
2019
return item.ConstantValue as bool? == false;
2120
}

src/Analyzers/Analyzers/src/StartupSymbols.cs

+3
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,15 @@ public StartupSymbols(Compilation compilation)
1111
{
1212
IApplicationBuilder = compilation.GetTypeByMetadataName(SymbolNames.IApplicationBuilder.MetadataName);
1313
IServiceCollection = compilation.GetTypeByMetadataName(SymbolNames.IServiceCollection.MetadataName);
14+
MvcOptions = compilation.GetTypeByMetadataName(SymbolNames.MvcOptions.MetadataName);
1415
}
1516

1617
public bool HasRequiredSymbols => IApplicationBuilder != null && IServiceCollection != null;
1718

1819
public INamedTypeSymbol IApplicationBuilder { get; }
1920

2021
public INamedTypeSymbol IServiceCollection { get; }
22+
23+
public INamedTypeSymbol MvcOptions { get; }
2124
}
2225
}

src/Analyzers/Analyzers/src/SymbolNames.cs

+7
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,12 @@ public static class SignalRAppBuilderExtensions
4141

4242
public const string UseSignalRMethodName = "UseSignalR";
4343
}
44+
45+
public static class MvcOptions
46+
{
47+
public const string MetadataName = "Microsoft.AspNetCore.Mvc.MvcOptions";
48+
49+
public const string EnableEndpointRoutingPropertyName = "EnableEndpointRouting";
50+
}
4451
}
4552
}

src/Analyzers/Analyzers/test/AnalyzerTestBase.cs

+5
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ public abstract class AnalyzerTestBase
1717

1818
public TestSource Read(string source)
1919
{
20+
if (!source.EndsWith(".cs"))
21+
{
22+
source = source + ".cs";
23+
}
24+
2025
var filePath = Path.Combine(ProjectDirectory, "TestFiles", GetType().Name, source);
2126
if (!File.Exists(filePath))
2227
{
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using System;
5+
using System.Threading.Tasks;
6+
using Microsoft.AspNetCore.Analyzer.Testing;
7+
using Microsoft.CodeAnalysis;
8+
using Microsoft.CodeAnalysis.Diagnostics;
9+
10+
namespace Microsoft.AspNetCore.Analyzers
11+
{
12+
internal class AnalyzersDiagnosticAnalyzerRunner : DiagnosticAnalyzerRunner
13+
{
14+
public AnalyzersDiagnosticAnalyzerRunner(DiagnosticAnalyzer analyzer)
15+
{
16+
Analyzer = analyzer;
17+
}
18+
19+
public DiagnosticAnalyzer Analyzer { get; }
20+
21+
public Task<Diagnostic[]> GetDiagnosticsAsync(string source)
22+
{
23+
return GetDiagnosticsAsync(sources: new[] { source }, Analyzer, Array.Empty<string>());
24+
}
25+
26+
public Task<Diagnostic[]> GetDiagnosticsAsync(Project project)
27+
{
28+
return GetDiagnosticsAsync(new[] { project }, Analyzer, Array.Empty<string>());
29+
}
30+
}
31+
}

src/Mvc/Mvc.Analyzers/test/StartupAnalyzerTest.cs renamed to src/Analyzers/Analyzers/test/StartupAnalyzerTest.cs

+12-19
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,22 @@
1-
// Copyright (c) .NET Foundation. All rights reserved.
1+
// Copyright (c) .NET Foundation. All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33

4-
using System;
54
using System.Collections.Concurrent;
65
using System.Linq;
76
using System.Threading.Tasks;
87
using Microsoft.AspNetCore.Analyzer.Testing;
9-
using Microsoft.AspNetCore.Mvc;
108
using Microsoft.CodeAnalysis;
119
using Xunit;
1210

1311
namespace Microsoft.AspNetCore.Analyzers
1412
{
15-
public class StartupAnalyzerTest
13+
public class StartupAnalyzerTest : AnalyzerTestBase
1614
{
1715
public StartupAnalyzerTest()
1816
{
1917
StartupAnalyzer = new StartupAnalzyer();
2018

21-
Runner = new MvcDiagnosticAnalyzerRunner(StartupAnalyzer);
19+
Runner = new AnalyzersDiagnosticAnalyzerRunner(StartupAnalyzer);
2220

2321
Analyses = new ConcurrentBag<object>();
2422
ConfigureServicesMethods = new ConcurrentBag<IMethodSymbol>();
@@ -32,7 +30,7 @@ public StartupAnalyzerTest()
3230

3331
private StartupAnalzyer StartupAnalyzer { get; }
3432

35-
private MvcDiagnosticAnalyzerRunner Runner { get; }
33+
private AnalyzersDiagnosticAnalyzerRunner Runner { get; }
3634

3735
private ConcurrentBag<object> Analyses { get; }
3836

@@ -44,7 +42,7 @@ public StartupAnalyzerTest()
4442
public async Task StartupAnalyzer_FindsStartupMethods_StartupSignatures_Standard()
4543
{
4644
// Arrange
47-
var source = ReadSource("StartupSignatures_Standard");
45+
var source = Read("StartupSignatures_Standard");
4846

4947
// Act
5048
var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
@@ -60,7 +58,7 @@ public async Task StartupAnalyzer_FindsStartupMethods_StartupSignatures_Standard
6058
public async Task StartupAnalyzer_FindsStartupMethods_StartupSignatures_MoreVariety()
6159
{
6260
// Arrange
63-
var source = ReadSource("StartupSignatures_MoreVariety");
61+
var source = Read("StartupSignatures_MoreVariety");
6462

6563
// Act
6664
var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
@@ -82,7 +80,7 @@ public async Task StartupAnalyzer_FindsStartupMethods_StartupSignatures_MoreVari
8280
public async Task StartupAnalyzer_MvcOptionsAnalysis_UseMvc_FindsEndpointRoutingDisabled()
8381
{
8482
// Arrange
85-
var source = ReadSource("MvcOptions_UseMvcWithDefaultRouteAndEndpointRoutingDisabled");
83+
var source = Read("MvcOptions_UseMvcWithDefaultRouteAndEndpointRoutingDisabled");
8684

8785
// Act
8886
var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
@@ -102,7 +100,7 @@ public async Task StartupAnalyzer_MvcOptionsAnalysis_UseMvc_FindsEndpointRouting
102100
public async Task StartupAnalyzer_MvcOptionsAnalysis_AddMvcOptions_FindsEndpointRoutingDisabled()
103101
{
104102
// Arrange
105-
var source = ReadSource("MvcOptions_UseMvcWithDefaultRouteAndAddMvcOptionsEndpointRoutingDisabled");
103+
var source = Read("MvcOptions_UseMvcWithDefaultRouteAndAddMvcOptionsEndpointRoutingDisabled");
106104

107105
// Act
108106
var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
@@ -125,7 +123,7 @@ public async Task StartupAnalyzer_MvcOptionsAnalysis_AddMvcOptions_FindsEndpoint
125123
public async Task StartupAnalyzer_MvcOptionsAnalysis_FindsEndpointRoutingEnabled(string sourceFileName, string mvcMiddlewareName)
126124
{
127125
// Arrange
128-
var source = ReadSource(sourceFileName);
126+
var source = Read(sourceFileName);
129127

130128
// Act
131129
var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
@@ -151,7 +149,7 @@ public async Task StartupAnalyzer_MvcOptionsAnalysis_FindsEndpointRoutingEnabled
151149
public async Task StartupAnalyzer_MvcOptionsAnalysis_MultipleMiddleware()
152150
{
153151
// Arrange
154-
var source = ReadSource("MvcOptions_UseMvcWithOtherMiddleware");
152+
var source = Read("MvcOptions_UseMvcWithOtherMiddleware");
155153

156154
// Act
157155
var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
@@ -183,7 +181,7 @@ public async Task StartupAnalyzer_MvcOptionsAnalysis_MultipleMiddleware()
183181
public async Task StartupAnalyzer_MvcOptionsAnalysis_MultipleUseMvc()
184182
{
185183
// Arrange
186-
var source = ReadSource("MvcOptions_UseMvcMultiple");
184+
var source = Read("MvcOptions_UseMvcMultiple");
187185

188186
// Act
189187
var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
@@ -215,7 +213,7 @@ public async Task StartupAnalyzer_MvcOptionsAnalysis_MultipleUseMvc()
215213
public async Task StartupAnalyzer_ServicesAnalysis_CallBuildServiceProvider()
216214
{
217215
// Arrange
218-
var source = ReadSource("ConfigureServices_BuildServiceProvider");
216+
var source = Read("ConfigureServices_BuildServiceProvider");
219217

220218
// Act
221219
var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
@@ -230,10 +228,5 @@ public async Task StartupAnalyzer_ServicesAnalysis_CallBuildServiceProvider()
230228
AnalyzerAssert.DiagnosticLocation(source.MarkerLocations["MM1"], diagnostic.Location);
231229
});
232230
}
233-
234-
private TestSource ReadSource(string fileName)
235-
{
236-
return MvcTestSource.Read(nameof(StartupAnalyzerTest), fileName);
237-
}
238231
}
239232
}

src/Mvc/Mvc.Analyzers/src/Startup/StartupFacts.cs

-99
This file was deleted.

src/Mvc/Mvc.Analyzers/src/Startup/StartupSymbols.cs

-23
This file was deleted.

0 commit comments

Comments
 (0)