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); } } } }