in src/WebJobs.Extensions.DurableTask.Analyzers/Analyzers/Orchestrator/DateTimeAnalyzer.cs [23:55]
public static bool RegisterDiagnostic(CompilationAnalysisContext context, SemanticModel semanticModel, SyntaxNode method)
{
var diagnosedIssue = false;
foreach (SyntaxNode descendant in method.DescendantNodes())
{
if (descendant is IdentifierNameSyntax identifierName)
{
var identifierText = identifierName.Identifier.ValueText;
if (identifierText == "Now" || identifierText == "UtcNow" || identifierText == "Today")
{
var memberAccessExpression = identifierName.Parent;
if (SyntaxNodeUtils.TryGetISymbol(semanticModel, memberAccessExpression, out ISymbol memberSymbol))
{
//Covers both DateTime and DateTimeOffset
if (memberSymbol.ToString().StartsWith("System.DateTime"))
{
var diagnostic = Diagnostic.Create(Rule, memberAccessExpression.GetLocation(), memberAccessExpression);
if (context.Compilation.ContainsSyntaxTree(method.SyntaxTree))
{
context.ReportDiagnostic(diagnostic);
}
diagnosedIssue = true;
}
}
}
}
}
return diagnosedIssue;
}