Skip to content

Commit 0821ae7

Browse files
Improve Analyzer Performance
1 parent 20c30f4 commit 0821ae7

File tree

1 file changed

+11
-23
lines changed

1 file changed

+11
-23
lines changed

src/CommunityToolkit.Maui.Analyzers/MaximumRatingRangeAnalyzer.cs

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
namespace CommunityToolkit.Maui.Analyzers;
2-
3-
using System.Collections.Immutable;
1+
using System.Collections.Immutable;
42
using Microsoft.CodeAnalysis;
53
using Microsoft.CodeAnalysis.CSharp;
64
using Microsoft.CodeAnalysis.CSharp.Syntax;
75
using Microsoft.CodeAnalysis.Diagnostics;
86

7+
namespace CommunityToolkit.Maui.Analyzers;
8+
99
[DiagnosticAnalyzer(LanguageNames.CSharp)]
1010
public class MaximumRatingRangeAnalyzer : DiagnosticAnalyzer
1111
{
@@ -38,28 +38,16 @@ public override void Initialize(AnalysisContext context)
3838

3939
static void AnalyzePropertyAssignment(SyntaxNodeAnalysisContext context)
4040
{
41-
AssignmentExpressionSyntax assignmentExpression = (AssignmentExpressionSyntax)context.Node;
42-
if (assignmentExpression.Left is IdentifierNameSyntax leftIdentifier && leftIdentifier.Identifier.Text == "MaximumRating")
41+
if (context.Node is AssignmentExpressionSyntax { Left: IdentifierNameSyntax { Identifier.Text: "MaximumRating" } leftIdentifier, Right: LiteralExpressionSyntax { Token.Value: int value } } assignmentExpression)
4342
{
44-
SemanticModel semanticModel = context.SemanticModel;
45-
IPropertySymbol? propertySymbol = semanticModel.GetSymbolInfo(leftIdentifier).Symbol as IPropertySymbol;
46-
if (propertySymbol?.ContainingType.Name == "RatingView" && assignmentExpression.Right is LiteralExpressionSyntax literal && literal.IsKind(SyntaxKind.NumericLiteralExpression) && literal.Token.Value is not null)
47-
{
48-
int value = (int)literal.Token.Value;
43+
var semanticModel = context.SemanticModel;
44+
var propertySymbol = semanticModel.GetSymbolInfo(leftIdentifier).Symbol as IPropertySymbol;
4945

50-
// Validate the value is within the range
51-
if (value is < minValue or > maxValue)
52-
{
53-
Diagnostic diagnostic = Diagnostic.Create(
54-
rule,
55-
assignmentExpression.GetLocation(),
56-
minValue,
57-
maxValue
58-
);
59-
60-
context.ReportDiagnostic(diagnostic);
61-
}
46+
if (propertySymbol?.ContainingType.Name == "RatingView" && (value < minValue || value > maxValue))
47+
{
48+
var diagnostic = Diagnostic.Create(rule, assignmentExpression.GetLocation(), minValue, maxValue);
49+
context.ReportDiagnostic(diagnostic);
6250
}
6351
}
6452
}
65-
}
53+
}

0 commit comments

Comments
 (0)