Exemplo n.º 1
0
        public static void ReportProblems(
            CompilationAnalysisContext context,
            SemanticModel semanticModel,
            IEnumerable <ActivityFunctionDefinition> functionDefinitions,
            IEnumerable <ActivityFunctionCall> functionInvocations)
        {
            foreach (var invocation in functionInvocations)
            {
                // If invocation uses constant and there is no matching function name in function definition, trust the customer for correctness in case they are using
                // <FunctionsInDependencies>true</FunctionsInDependencies>
                if (!functionDefinitions.Select(x => x.FunctionName).Contains(invocation.FunctionName) && !IsConstant(semanticModel, invocation.NameNode))
                {
                    if (SyntaxNodeUtils.TryGetClosestString(invocation.FunctionName, functionDefinitions.Select(x => x.FunctionName), out string closestName))
                    {
                        var diagnostic = Diagnostic.Create(CloseRule, invocation.NameNode.GetLocation(), invocation.FunctionName, closestName);

                        context.ReportDiagnostic(diagnostic);
                    }
                    else
                    {
                        var diagnostic = Diagnostic.Create(MissingRule, invocation.NameNode.GetLocation(), invocation.FunctionName);

                        context.ReportDiagnostic(diagnostic);
                    }
                }
            }
        }
        private void ReportDiagnostics(CompilationAnalysisContext context)
        {
            foreach (AttributeSyntax entityTrigger in entityTriggerAttributes)
            {
                SemanticModel semanticModel = context.Compilation.GetSemanticModel(entityTrigger.SyntaxTree);
                if (SyntaxNodeUtils.TryGetFunctionNameAndNode(semanticModel, entityTrigger, out SyntaxNode attributeArgument, out string functionName))
                {
                    if (!classNames.Contains(functionName))
                    {
                        if (SyntaxNodeUtils.TryGetClosestString(functionName, classNames, out string closestName))
                        {
                            var diagnostic = Diagnostic.Create(ClassNameCloseRule, attributeArgument.GetLocation(), functionName, closestName);

                            context.ReportDiagnostic(diagnostic);
                        }
                        else
                        {
                            var diagnostic = Diagnostic.Create(ClassNameMissingRule, attributeArgument.GetLocation(), functionName);

                            context.ReportDiagnostic(diagnostic);
                        }
                    }
                }
            }
        }
        public static void ReportProblems(
            CompilationAnalysisContext context,
            IEnumerable <ActivityFunctionDefinition> availableFunctions,
            IEnumerable <ActivityFunctionCall> calledFunctions)
        {
            foreach (var activityInvocation in calledFunctions)
            {
                if (!availableFunctions.Select(x => x.FunctionName).Contains(activityInvocation.Name))
                {
                    if (SyntaxNodeUtils.TryGetClosestString(activityInvocation.Name, availableFunctions.Select(x => x.FunctionName), out string closestName))
                    {
                        var diagnostic = Diagnostic.Create(CloseRule, activityInvocation.NameNode.GetLocation(), activityInvocation.Name, closestName);

                        context.ReportDiagnostic(diagnostic);
                    }
                    else
                    {
                        var diagnostic = Diagnostic.Create(MissingRule, activityInvocation.NameNode.GetLocation(), activityInvocation.Name);

                        context.ReportDiagnostic(diagnostic);
                    }
                }
            }
        }