Skip to content

Commit f3067f0

Browse files
committed
增加泛型方法诊断器
1 parent 992e66e commit f3067f0

File tree

3 files changed

+58
-4
lines changed

3 files changed

+58
-4
lines changed

WebApiClient.Analyzers/Descriptors.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ static class Descriptors
3131
public static DiagnosticDescriptor NotMethodDefindedDescriptor { get; }
3232
= Create("WA1004", "不支持的非方法声明", "不支持的非方法声明,只允许方法的声明");
3333

34+
/// <summary>
35+
/// 泛型方法诊断描述器
36+
/// </summary>
37+
public static DiagnosticDescriptor GenericMethodDescriptor { get; }
38+
= Create("WA1005", "不支持的泛型方法", "不支持声明泛型方法");
39+
3440
/// <summary>
3541
/// 创建诊断描述器
3642
/// </summary>
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
using Microsoft.CodeAnalysis;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
7+
namespace WebApiClient.Analyzers.Diagnostics
8+
{
9+
/// <summary>
10+
/// 表示泛型方法诊断器
11+
/// </summary>
12+
class GenericMethodDiagnostic : HttpApiDiagnostic
13+
{
14+
/// <summary>
15+
/// 获取诊断描述
16+
/// </summary>
17+
public override DiagnosticDescriptor Descriptor => Descriptors.GenericMethodDescriptor;
18+
19+
/// <summary>
20+
/// 泛型方法诊断器
21+
/// </summary>
22+
/// <param name="context">上下文</param>
23+
public GenericMethodDiagnostic(HttpApiContext context)
24+
: base(context)
25+
{
26+
}
27+
28+
/// <summary>
29+
/// 返回所有的报告诊断
30+
/// </summary>
31+
/// <returns></returns>
32+
protected override IEnumerable<Diagnostic> GetDiagnostics()
33+
{
34+
foreach (var method in this.GetApiMethodSymbols())
35+
{
36+
if (method.IsGenericMethod == true)
37+
{
38+
var location = method.DeclaringSyntaxReferences.First().GetSyntax().GetLocation();
39+
yield return this.CreateDiagnostic(location);
40+
}
41+
}
42+
}
43+
}
44+
}

WebApiClient.Analyzers/HttpApiAnalyzer.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ public override ImmutableArray<DiagnosticDescriptor> SupportedDiagnostics
2424
Descriptors.AttributeDescriptor,
2525
Descriptors.ReturnTypeDescriptor,
2626
Descriptors.RefParameterDescriptor,
27-
Descriptors.NotMethodDefindedDescriptor);
27+
Descriptors.NotMethodDefindedDescriptor,
28+
Descriptors.GenericMethodDescriptor);
2829
}
2930
}
3031

@@ -37,10 +38,12 @@ public override void Initialize(AnalysisContext context)
3738
context.RegisterSyntaxNodeAction(syntaxNodeContext =>
3839
{
3940
var httpApiContext = new HttpApiContext(syntaxNodeContext);
40-
var httpApiDiagnostics = this.GetHttpApiDiagnostics(httpApiContext);
41-
foreach (var item in httpApiDiagnostics)
41+
if (httpApiContext.IsHtttApi == true)
4242
{
43-
item.Report();
43+
foreach (var item in this.GetHttpApiDiagnostics(httpApiContext))
44+
{
45+
item.Report();
46+
}
4447
}
4548
}, SyntaxKind.InterfaceDeclaration);
4649
}
@@ -56,6 +59,7 @@ private IEnumerable<IHttpApiDiagnostic> GetHttpApiDiagnostics(HttpApiContext con
5659
yield return new ReturnTypeDiagnostic(context);
5760
yield return new RefParameterDiagnostic(context);
5861
yield return new NotMethodDefindedDiagnostic(context);
62+
yield return new GenericMethodDiagnostic(context);
5963
}
6064
}
6165
}

0 commit comments

Comments
 (0)