protected override void Run()

in PluginsAndFeatures/azure-toolkit-for-rider/src/dotnet/ReSharper.Azure/Azure.Daemon/FunctionApp/Stages/Analysis/TimerTriggerCronExpressionAnalyzer.cs [46:92]


    protected override void Run(IAttribute element, ElementProblemAnalyzerData data, IHighlightingConsumer consumer)
    {
        if (element.Arguments.Count != 1) return;

        var resolveResult = element.TypeReference?.Resolve();
        var typeElement = resolveResult?.DeclaredElement as ITypeElement;
        if (typeElement == null) return;

        if (!typeElement.IsTimerTriggerAttribute()) return;

        var expressionArgument = element.Arguments.FirstOrDefault()?.Value;
        if (expressionArgument is null || !expressionArgument.Type().IsString()) return;

        if (expressionArgument is not ICSharpLiteralExpression literalExpression) return;

        var literal = literalExpression.ConstantValue.StringValue;
        if (literal.IsEmpty()) return;
        if (literal.StartsWith('%') && literal.EndsWith('%') && literal.Length > 2) return;

        var mayBeTimeSpanSchedule = literal.Contains(':');
        if (mayBeTimeSpanSchedule)
        {
            if (IsValidTimeSpanSchedule(literal, out var errorMessage, out var description) &&
                !string.IsNullOrEmpty(description))
            {
                consumer.AddHighlighting(new TimerTriggerCronExpressionHint(description, literalExpression,
                    literalExpression.GetDocumentEndOffset()));
            }
            else
            {
                consumer.AddHighlighting(new TimerTriggerCronExpressionError(literalExpression, errorMessage));
            }
        }
        else
        {
            if (IsValidCrontabSchedule(literal, out var errorMessage, out var description) &&
                !string.IsNullOrEmpty(description))
            {
                consumer.AddHighlighting(new TimerTriggerCronExpressionHint(description, literalExpression,
                    literalExpression.GetDocumentEndOffset()));
            }
            else
            {
                consumer.AddHighlighting(new TimerTriggerCronExpressionError(literalExpression, errorMessage));
            }
        }
    }